Der Frühlings -MVC -Dispatcher kann nicht ordnungsgemäß funktionieren, wenn das URL -Muster ein Pfad ist

StackOverflow https://stackoverflow.com/questions/5367309

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top