也许您也需要知道 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
。如前所述,默认值为alwaysUseFullPath
false,即在你的请求中,仅/api/feature/doSomething
用于查找对应的Controller,而没有Controller关心该路径。您需要将您的 url 更改为/perfix/perfix/api/feature/doSomething
或perfix
从 MyController base中删除@RequestingMapping
。