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