Belki de 404
saatlerce acı çektiğim için URL'lerin nasıl haritalandığını bilmeniz gerekir . İki tür işleyici işleme isteği vardır. BeanNameUrlHandlerMapping
ve SimpleUrlHandlerMapping
. Bir tanımladığımızda servlet-mapping
, kullanıyoruz SimpleUrlHandlerMapping
. Bilmemiz gereken bir şey, bu iki işleyicinin alwaysUseFullPath
varsayılan olarak adlandırılan ortak bir özelliği paylaşmasıdır false
.
false
burada 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 alwaysUseFullPath
false şeklindedir, yani isteğinizde yalnızca /api/feature/doSomething
karşı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/doSomething
veya perfix
MyController tabanından kaldırmanız gerekir @RequestingMapping
.