如何捕获,为什么请求没有映射到Spring Web?

时间:2015-12-26 17:19:04

标签: java spring spring-mvc spring-boot

我有以下映射:

   @RequestMapping(value = "/", params = "!op")
   public Iterable<User> getUserList() {
      return userRepository.findAll();
   }

我也有以下映射(可能有冲突):

@RequestMapping(value = "/", params = "op=delete")

@RequestMapping(value = "/",params = "op=update")

虽然整个班级都有一个映射

@RequestMapping("/user")

启动时,我在日志中有以下消息:

2015-12-26 20:11:25.103  INFO 5796 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/user/],params=[op=update]}" onto public com.inthemoon.pdk.data.User com.inthemoon.pdk.web.UserController.addUserByScreenName(java.lang.String,java.lang.String)
2015-12-26 20:11:25.105  INFO 5796 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/user/],params=[op=delete]}" onto public com.inthemoon.pdk.data.User com.inthemoon.pdk.web.UserController.deleteUserByScreenName(java.lang.String)
2015-12-26 20:11:25.105  INFO 5796 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/user/],params=[!op]}" onto public java.lang.Iterable<com.inthemoon.pdk.data.User> com.inthemoon.pdk.web.UserController.getUserList()

不幸的是,所讨论的映射不起作用,即当我请求时

http://localhost:8080/user

未触发映射方法。

为什么?

是否可以打开日志记录以便跟踪,Spring如何决定,在哪里映射请求?

1 个答案:

答案 0 :(得分:3)

如果!op旨在表示“没有op参数”,则只需按照建议将其删除即可。

http://localhost:8080/user未达到@RequestMapping的原因是因为它缺少尾部斜杠(即方法上@RequestMapping中的斜杠)。如果您删除!op并向http://localhost:8080/user/发出请求,则应按预期映射请求。