也许您还需要知道url的映射方式,因为我经历404
了好几个小时。有两种处理请求的处理程序。BeanNameUrlHandlerMapping
和SimpleUrlHandlerMapping
。当定义a时servlet-mapping
,我们正在使用SimpleUrlHandlerMapping
。我们需要知道的一件事是,这两个处理程序共享一个通用属性alwaysUseFullPath
,默认为false
。
false
这意味着Spring将不会使用完整路径将URL映射到控制器。这是什么意思?这意味着当您定义一个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
。如前所述,默认值of alwaysUseFullPath
为false,这意味着在您的请求中,该值仅/api/feature/doSomething
用于查找相应的Controller,但没有Controller关心该路径。您需要将URL更改为MyController base /perfix/perfix/api/feature/doSomething
或perfix
从MyController base中删除@RequestingMapping
。