Impossibile far funzionare correttamente il dispatcher MVC Spring quando il modello URL è un percorso

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

Domanda

Ho un'app Web che stiamo applicando Spring MVC solo per i servizi di riposo al momento. Vogliamo che i nostri servizi di riposo appaia ${contextPath}/rest/**, tuttavia, quando ho impostato questo, otteniamo:

Nessuna mappatura trovata per la richiesta HTTP con URI [/myApp/Rest/Testsvc/Message] In Dispatcherservlet con nome 'Spring MVC Dispatcher Servlet'

Mio web.xml ha:

<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, che va bene e registra servizi man mano che vengono registrati all'avvio.

<context:component-scan base-package="com.mycompany.myapp.rest" />
<mvc:annotation-driven />

Il mio controller sembra segue:

@Controller
@RequestMapping(value = "/rest/testService")
public class TestREST {
    @RequestMapping(value="message", method=RequestMethod.GET)
    public @ResponseBody String getMessage() {
        return "REST working";
    }

Se ho cahnge il url-pattern in web.xml a *.rest e la mia mappatura di richiesta per message a message.rest funziona.

È stato utile?

Soluzione

Il problema è probabile che tu abbia ripetuto il /rest prefisso in entrambi web.xml e @RequestMapping. Dovrebbe essere in uno o in uno dei due, ma non entrambi, ad esempio

<url-pattern>/rest</url-pattern>

e

@RequestMapping(value = "/testService")

I percorsi su cui @RequestMapping opera sono le parti del percorso che segue la parte servlet e il tuo web.xml definisce la parte del servlet come /path, Così @RequestMapping corrispondenze contro qualunque cosa rimanga, cioè /testService.

Nella sua forma attuale, il tuo @RequestMapping sta effettivamente abbinando contro {contextPath}/rest/rest/testService.

Altri suggerimenti

Forse potresti provare a cambiare in <url-pattern>/rest/*</url-pattern> o <url-pattern>/rest*</url-pattern> E vedi se questo aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top