Spring RequestMapping 冲突
Spring RequestMapping conflicts
我有一个 RequestMapping
显示网格,另一个用于在网格中加载对象。
@RequestMapping(value = "/grid/{objType}", method = RequestMethod.GET)
public String displayGrid(Model model, @PathVariable("objType") String objType) {
// some code here
}
@RequestMapping(value = "/loadGrid", method = RequestMethod.GET)
public @ResponseBody String loadGrid(Model model) {
// returns a JSON
}
当我显示网格时,url 就像 ../grid/User
问题是在创建网格并发出请求 loadGrid 后,请求映射到 /grid/loadGrid
,这是由第一种方法而不是第二种方法解决的。
有什么方法可以在 /grid
之后不发送任何内容的请求吗?
或者有什么方法可以解决这个冲突?
碰撞不是问题; spring 首先解析完全匹配。 (见source code of AbstractHandlerMethodMapping
)
您的问题是您错误地定义了您的映射。如果你在class级别定义了一个@RequestMapping
,那么所有的方法@RequestMappings
都将以定义的值作为前缀。
以下映射了三个端点:/grid
、/grid/{objType}
和 /grid/loadGrid
。请注意,get()
的 @RequestMapping
没有定义 value
,仅定义了 method
,因为它继承自 class 级注释。
@Controller
@RequestMapping(value = "/grid")
public class GridController {
@RequestMapping(method = RequestMethod.GET)
public String get(Model model) {
// ...
}
@RequestMapping(value = "/{objType}", method = RequestMethod.GET)
public String displayGrid(Model model, @PathVariable("objType") String objType) {
// ...
}
@ResponseBody
@RequestMapping(value = "/loadGrid", method = RequestMethod.GET)
public String loadGrid(Model model) {
// ...
}
}
我有一个 RequestMapping
显示网格,另一个用于在网格中加载对象。
@RequestMapping(value = "/grid/{objType}", method = RequestMethod.GET)
public String displayGrid(Model model, @PathVariable("objType") String objType) {
// some code here
}
@RequestMapping(value = "/loadGrid", method = RequestMethod.GET)
public @ResponseBody String loadGrid(Model model) {
// returns a JSON
}
当我显示网格时,url 就像 ../grid/User
问题是在创建网格并发出请求 loadGrid 后,请求映射到 /grid/loadGrid
,这是由第一种方法而不是第二种方法解决的。
有什么方法可以在 /grid
之后不发送任何内容的请求吗?
或者有什么方法可以解决这个冲突?
碰撞不是问题; spring 首先解析完全匹配。 (见source code of AbstractHandlerMethodMapping
)
您的问题是您错误地定义了您的映射。如果你在class级别定义了一个@RequestMapping
,那么所有的方法@RequestMappings
都将以定义的值作为前缀。
以下映射了三个端点:/grid
、/grid/{objType}
和 /grid/loadGrid
。请注意,get()
的 @RequestMapping
没有定义 value
,仅定义了 method
,因为它继承自 class 级注释。
@Controller
@RequestMapping(value = "/grid")
public class GridController {
@RequestMapping(method = RequestMethod.GET)
public String get(Model model) {
// ...
}
@RequestMapping(value = "/{objType}", method = RequestMethod.GET)
public String displayGrid(Model model, @PathVariable("objType") String objType) {
// ...
}
@ResponseBody
@RequestMapping(value = "/loadGrid", method = RequestMethod.GET)
public String loadGrid(Model model) {
// ...
}
}