也许您也需要知道 url 是如何映射的,因为我已经忍受404了几个小时。有两种处理请求的处理程序。BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping。当我们定义 aservlet-mapping时,我们正在使用SimpleUrlHandlerMapping. 我们需要知道的一件事是这两个处理程序共享一个名为的公共属性alwaysUseFullPath,默认为false.
false这意味着 Spring 不会使用完整路径将 url 映射到控制器。这是什么意思?这意味着当您定义 a 时servlet-mapping:
<servlet-mapping>
<servlet-name>viewServlet</servlet-name>
<url-pattern>/perfix/*</url-pattern>
</servlet-mapping>
处理程序实际上将使用该*部件来查找控制器。例如,404当您使用以下控制器请求它时,它将面临错误/perfix/api/feature/doSomething
@Controller()
@RequestMapping("/perfix/api/feature")
public class MyController {
@RequestMapping(value = "/doSomething", method = RequestMethod.GET)
@ResponseBody
public String doSomething(HttpServletRequest request) {
....
}
}
这是一个完美的匹配,对吧?但是为什么404。如前所述,默认值为alwaysUseFullPathfalse,即在你的请求中,仅/api/feature/doSomething用于查找对应的Controller,而没有Controller关心该路径。您需要将您的 url 更改为/perfix/perfix/api/feature/doSomething或perfix从 MyController base中删除@RequestingMapping。