如何在Spring MVC中定义请求映射的优先级?

时间:2015-05-23 23:30:10

标签: java spring rest spring-mvc

使用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) {
    // ...
}

现在,当我致电:

  

/测试

永远不会调用第二种方法。

如果我的第二种方法总是被称为代替第一种方法,我该怎么办?

1 个答案:

答案 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) {
// ...

}