Impossible d'obtenir dispatcher Spring MVC fonctionne correctement lorsque modèle url est un chemin

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

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top