Spring MVC默认使用@RequestMapping来捕获不匹配的URL

时间:2017-03-30 01:38:09

标签: java spring spring-mvc

我有这个控制器

@Controller
@RequestMapping(value = "/v1.0/user")
public class UserController {

    @RequestMapping(value = "/findOne/{id}", method = RequestMethod.GET)
    public @ResponseBody String findOne(@PathVariable("id") Integer id) {
        log.info("findOne");
        return "found URL";
    }       

}

哪个匹配网址:http://localhost:8080/v1.0/user/findOne/4

但是如果我的路径变量不正确:http://localhost:8080/v1.0/user/findOne/4A

我一无所获。甚至没有错误。好像Spring吞下了URL。

我添加了

@RequestMapping(value = "/.*", method = RequestMethod.GET)
public @ResponseBody String redirectEverythingOtherThanTest(){
    log.info("no url matched");
    return "badly formed URL for Users";
}

我再一无所获。我想要完成的是每个Controller在URL不匹配时都有唯一的消息。

1 个答案:

答案 0 :(得分:0)

在我的每个Controller类的最后,我添加了

@ExceptionHandler(Exception.class)
public @ResponseBody String handleException(Exception e, HttpServletRequest request, HttpServletResponse response) {
    response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    return e.getMessage();

}

这将捕获所有异常,我可以将其视为一个全部捕获。