使用SpringMVC,我有一个捕获所有REST请求的方法:
@RequestMapping(value = "/**")
public Object catchAll(@RequestBody(required = false) Object body, HttpMethod method, HttpServletRequest request, HttpServletResponse response) {
// ...
}
现在我想通过以下端点捕获一些请求:
@RequestMapping(value = "/test", method = RequestMethod.POST)
public Object post(@RequestBody Object body, HttpMethod method, HttpServletRequest request, HttpServletResponse response) {
// ...
}
现在,当我致电:
/测试
永远不会调用第二种方法。
如果我的第二种方法总是被称为代替第一种方法,我该怎么办?
答案 0 :(得分:0)
首先,Asura指出,不要实现'catchAll'方法。话虽如此,Spring MVC允许您在URL中使用正则表达式。
阅读有关在Spring URL(here中使用正则表达式的文档。
在您的情况下,请在第一个网址中使用否定前瞻功能删除以/test
开头的内容。这样,您的/**
控制器将捕获除/test
之外的所有请求,您可以使用其他控制器来捕获这些请求。
在第一个网址中使用否定前瞻:
@RequestMapping(value = "/^(?!test)")
public Object catchAll(@RequestBody(required = false) Object body, HttpMethod method, HttpServletRequest request, HttpServletResponse response) {
// ...
}
现在,这应该抓住/test
个请求:
@RequestMapping(value = "/test", method = RequestMethod.POST)
public Object post(@RequestBody Object body, HttpMethod method, HttpServletRequest request, HttpServletResponse response) {
// ...
}