Ajax 请求始终映射到 root

Ajax request mapped to root always

我的 ajax 请求总是映射到“/”,即使在指定了像“/ajax/file/upload”这样的完整路径之后也是如此

在我的控制器中,我有以下两种方法

@RequestMapping(value = "/")
public ModelAndView getView() {
}

@RequestMapping(value = "/ajax/file/upload", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST)
@ResponseBody
public String readFile(File file) {
}

在客户端,当我实例化一个 ajax 请求时,例如 "ajax/file/upload",该请求已被重定向到方法 "getView" 而不是 "readFile"。

我认为,发生这种情况是因为请求映射“/”也与模式 "ajax/file/upload" 匹配,但不确定。如果是这样,如何区分这两个映射?

I think, this happen because the request mapping "/" also matches the pattern "ajax/file/upload"

Spring 将始终使用最佳匹配 来决定应使用哪种方法处理请求。

可能会发生以下情况:

  • 如果在客户端发送 GET 请求而不是 POST 请求,最佳匹配是“/”,因为“/ajax/file/upload”只接受 POST 请求。您可以在浏览器网络 activity 中调试它以检查 request/response
  • 的详细信息
  • 如果您实施了安全措施,则需要检查您的 ajax 请求是否发送了正确的 cookies/authentication 令牌

另一件可能值得检查的事情是,如果您 ajax 请求发送 header "Accept: application/json" 或 "Accept: /"