2009-06-03 7 views
3

Je suis en train d'obtenir un service simple REST pour travailler avec Spring 3.0, mais garder heurtant une erreur de blocage:Spring 3.0 REST mise en œuvre DispatcherServlet ne peut pas trouver la cartographie

Aucune correspondance trouvée pour la requête HTTP avec l'URI [/ Voyage/nous/nyc/SFO/20091010/1122/true /] dans DispatcherServlet avec le nom 'dispatcher' *

Cependant, dans le fichier journal, il indique également:

org.springframework.web.servlet.mvc.annotation .Def aultAnnotationHandlerMapping - Mappé le chemin de l'URL [/ travel/us/{de}/{à}/{date}/{time}/{departure} /] sur le gestionnaire [[email protected]] *

que j'ai lu comme une indication qu'il y a une correspondance entre l'adresse URI de la classe experiment.SomeController comme gestionnaire.

Je dois être simple erreur donnant sur une dans l'un des fichiers de configuration, mais après avoir vérifié tout plusieurs fois et faire un peu de recherche sur Google, je ne l'ai pas encore trouvé une solution. J'ai déjà activé la journalisation pour les classes de printemps, mais cela n'a pas non plus révélé le problème.

Voici les fichiers de configuration pertinents et quelques extraits de code, toute aide est appeciated. La webapp est déployée sur Glassfish v2.1 et j'utilise la version M3 de Spring 3.0.0 sur JDK1.5 sous OS X.

L'objectif est que getTripDetails() renvoie une version XML des détails du ticket. . D'où l'utilisation du MarshallingView.

De web.xml:

 
<servlet> 
<servlet-name>dispatcher</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
<servlet-name>dispatcher</servlet-name> 
<url-pattern>/*</url-pattern> 
</servlet-mapping> 

De répartiteur-servlet.xml:

 
<context:annotation-config /> 
<context:component-scan base-package="net.vermaas.reisadvies.server" /> 

<bean class="org.springframework.web.servlet.mvc.annotat ion.DefaultAnnotationHandlerMapping"> 
<property name="alwaysUseFullPath" value="true"/> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.Conten tNegotiatingViewResolver"> 
<property name="mediaTypes"> 
<map> 
<entry key="xml" value="application/xml"/> 
</map> 
</property> 
<property name="viewResolvers"> 
<list> 
<bean class="org.springframework.web.servlet.view.BeanNa meViewResolver"/> 
<bean class="org.springframework.web.servlet.view.Intern alResourceViewResolver"> 
<property name="prefix" value="/WEB-INF/jsp/"/> 
<property name="suffix" value=".jsp"/> 
</bean> 
</list> 
</property> 
</bean> 

<bean id="marshaller" class="org.springframework.oxm.xstream.XStreamMars haller"> 
</bean> 

<bean id="content" class="org.springframework.web.servlet.view.xml.Ma rshallingView"> 
<property name="contentType" value="application/xml" /> 
<property name="marshaller" ref="marshaller"/> 
</bean> 

La classe contrôleur: @Controller public class SomeController {

static Logger logger = Logger.getLogger(SomeController.class);

public SomeController() { }

@RequestMapping(value="/travel/us/{from}/{to}/{date}/{time}/{departure}", method=RequestMethod.GET)

public ModelAndView getTripDetails(@PathVariable String from, @PathVariable String to, @PathVariable String date, @PathVariable String time, @PathVariable boolean departure, Model model) {

logger.debug("getTripDetails"); // not logged 

// Do some stuff 
TripDetails td = ... 

ModelAndView mav = new ModelAndView(); 
mav.setViewName("content"); 
mav.addObject("tripDetails", td); 

return mav; 

}

}

Toute réflexion sur ce qui ne va pas? Ou un pointeur vers un exemple de travail d'un service REST avec Spring 3.0 qui a XML en sortie?

Cordialement, Gero

Répondre

2

Moi aussi, je suis tombé sur la même question, et la façon dont il fonctionne avec Spring 3.0 est bu replaceing/* dans le modèle d'URL pour/

+0

Cela faisait partie de la solution. En plus de cela, j'ai aussi dû aligner le bean du bean qui est la vue avec l'URL définie. Donc: et dans le contrôleur: @RequestMapping (value = "/ content/...") – Gero

+0

Cette solution ne fonctionne pas sur Google App Engine au moins. – pjesi

2

Vous devez faire quelque chose comme ceci:

<servlet-mapping> 
    <servlet-name>baseproj</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

Sinon, vos css, js et images ne seront pas résolus. Je sais que ça craint mais doit être fait. Je masque la partie http://localhost:8080/myapp/rest avec apache mod_jk de toute façon donc ce n'est pas grave.

+0

Entièrement non. Vous pouvez par exemple mapper * .css au servlet "default" et cela vous servira vos fichiers statiques. Pour Tomcat, voir http://tomcat.apache.org/tomcat-6.0-doc/default-servlet.html –

Questions connexes