Der Frühlings -MVC -Dispatcher kann nicht ordnungsgemäß funktionieren, wenn das URL -Muster ein Pfad ist
-
27-10-2019 - |
Frage
Ich habe eine Web -App, die wir im Moment nur für REST -Dienste anwenden. Wir möchten, dass unsere Ruhedienste unter erscheinen ${contextPath}/rest/**
, Als ich dies jedoch einstellte, bekommen wir:
Keine Zuordnung für die HTTP -Anforderung mit URI [/myapp/rest/testsvc/message] im DispatcherServlet mit dem Namen 'Spring MVC Dispatcher Servlet' gefunden.
Mein web.xml
hat:
<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
, was in Ordnung ist und Dienste registriert, wenn sie beim Start registriert werden.
<context:component-scan base-package="com.mycompany.myapp.rest" />
<mvc:annotation-driven />
Mein Controller sieht wie folgt aus:
@Controller
@RequestMapping(value = "/rest/testService")
public class TestREST {
@RequestMapping(value="message", method=RequestMethod.GET)
public @ResponseBody String getMessage() {
return "REST working";
}
Wenn ich das CAHNGEE url-pattern
in web.xml
zu *.rest und mein Anfragen-Mapping für message
zu message.rest
Es klappt.
Lösung
Das Problem ist wahrscheinlich, dass Sie das wiederholt haben /rest
Präfix in beiden web.xml
und @RequestMapping
. Es sollte in einem oder entweder, aber nicht beides sein, z. B.
<url-pattern>/rest</url-pattern>
und
@RequestMapping(value = "/testService")
Die Wege, auf denen @RequestMapping
Betrieb sind die Teile des Pfades, der dem Servlet -Teil folgt, und Ihre web.xml
definiert den Servlet -Teil als /path
, Also @RequestMapping
Übereinstimmung gegen alles, was noch übrig ist, dh /testService
.
In seiner aktuellen Form Ihre @RequestMapping
passt tatsächlich gegen {contextPath}/rest/rest/testService
.
Andere Tipps
Vielleicht könnten Sie versuchen, sich zu wechseln <url-pattern>/rest/*</url-pattern
> oder <url-pattern>/rest*</url-pattern
> Und sehen Sie, ob das hilft.