Impossible d'obtenir dispatcher Spring MVC fonctionne correctement lorsque modèle url est un chemin
-
27-10-2019 - |
Question
J'ai une application web que nous appliquons au printemps MVC juste pour les services REST pour le moment. Nous voulons que nos services de repos apparaissent sous ${contextPath}/rest/**
, mais quand je mets ce que nous obtenons:
Aucun mappage trouvé pour requête HTTP avec l'URI [/ myapp / repos / testSvc / message] dans DispatcherServlet avec le nom 'Spring MVC Dispatcher Servlet'
Mon web.xml
a:
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/rest</url-pattern>
</servlet-mapping>
servlet-context.xml
, ce qui est bien et enregistre des services comme ils sont enregistrés au démarrage.
<context:component-scan base-package="com.mycompany.myapp.rest" />
<mvc:annotation-driven />
Mon regard du contrôleur comme suit:
@Controller
@RequestMapping(value = "/rest/testService")
public class TestREST {
@RequestMapping(value="message", method=RequestMethod.GET)
public @ResponseBody String getMessage() {
return "REST working";
}
Si je cahnge le url-pattern
dans web.xml
à * .rest et ma demande de cartographie pour message
à message.rest
cela fonctionne.
La solution
Le problème est probable que vous avez répété le préfixe /rest
dans les deux web.xml
et @RequestMapping
. Il devrait être dans l'un ou l'autre, mais pas les deux, par exemple.
<url-pattern>/rest</url-pattern>
et
@RequestMapping(value = "/testService")
Les chemins sur lesquels opère @RequestMapping
sont les parties du chemin qui suit la partie de servlet, et votre web.xml
définit la partie de servlet comme /path
, donc les matches de @RequestMapping
contre ce qui reste, à savoir /testService
.
Dans sa forme actuelle, votre @RequestMapping
est correspondant en fait contre {contextPath}/rest/rest/testService
.
Autres conseils
Peut-être que vous pourriez essayer de changer à <url-pattern>/rest/*</url-pattern
> ou <url-pattern>/rest*</url-pattern
> et voir si cela aide.