Belki de 404saatlerce acı çektiğim için URL'lerin nasıl haritalandığını bilmeniz gerekir . İki tür işleyici işleme isteği vardır. BeanNameUrlHandlerMappingve SimpleUrlHandlerMapping. Bir tanımladığımızda servlet-mapping, kullanıyoruz SimpleUrlHandlerMapping. Bilmemiz gereken bir şey, bu iki işleyicinin alwaysUseFullPathvarsayılan olarak adlandırılan ortak bir özelliği paylaşmasıdır false.
falseburada Spring, bir url'yi bir denetleyiciye eşlemek için tam yolu kullanmayacağı anlamına gelir. Bu ne demek? Bir aşağıdakileri tanımladığınızda servlet-mapping:
<servlet-mapping>
<servlet-name>viewServlet</servlet-name>
<url-pattern>/perfix/*</url-pattern>
</servlet-mapping>
işleyici aslında *denetleyiciyi bulmak için parçayı kullanır. Örneğin, aşağıdaki denetleyici 404şunu kullanarak talep ettiğinizde bir hatayla karşılaşır:/perfix/api/feature/doSomething
@Controller()
@RequestMapping("/perfix/api/feature")
public class MyController {
@RequestMapping(value = "/doSomething", method = RequestMethod.GET)
@ResponseBody
public String doSomething(HttpServletRequest request) {
....
}
}
Mükemmel bir uyum, değil mi? Ama neden 404. Daha önce de belirtildiği gibi, varsayılan değeri alwaysUseFullPathfalse şeklindedir, yani isteğinizde yalnızca /api/feature/doSomethingkarşılık gelen bir Denetleyici bulmak için kullanılır, ancak bu yolla ilgilenen hiçbir Denetleyici yoktur. URL'nizi değiştirmeniz /perfix/perfix/api/feature/doSomethingveya perfixMyController tabanından kaldırmanız gerekir @RequestingMapping.