2009-06-03 8 views
3

Ich versuche, einen einfachen REST-Service zu erhalten mit Frühling 3.0 zu arbeiten, aber in einen blockierenden Fehler stieß halten:Frühling 3.0 REST Implementierung DispatcherServlet nicht-Mapping findet

Keine Zuordnung für HTTP-Anforderung mit URI gefunden [/ Reise/us/NYC/sfo/20091010/1122/true /] in DispatcherServlet mit dem Namen 'Dispatcher' *

jedoch in der Protokolldatei heißt es auch:

org.springframework.web.servlet.mvc.annotation .Def aultAnnotationHandlerMapping - Zugeordneter URL-Pfad [/ travel/us/{von}/{to}/{date}/{time}/{departure} /] auf den Handler [[email protected]] *

, die ich als eine Anzeige gelesen, dass es eine Abbildung von dem URI zu der experiment.SomeController Klasse als Handler ist.

Ich muß einen einfachen Fehler in einen der Konfigurationsdateien wird mit Blick auf, aber nach allem, was mehrmals überprüft und dabei ziemlich viel Googeln ich eine Lösung noch nicht gefunden haben. Ich habe bereits das Logging für die Spring-Klassen eingeschaltet, aber das hat das Problem auch nicht aufgedeckt.

Im Folgenden finden Sie die relevanten Konfigurationsdateien und einige Code-Schnipsel, auf die Sie sich beziehen können. Die Webapp wird auf Glassfish v2.1 bereitgestellt und ich benutze das M3-Build von Spring 3.0.0 auf JDK1.5 unter OS X.

Ziel ist es, dass die getTripDetails() eine XML-Version der Tripdetails zurückgibt . Daher die Verwendung der MarshallingView.

Von 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> 

Von Dispatcher-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> 

Die Controller-Klasse: @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; 

}

}

Irgendwelche Gedanken auf, was ist los? Oder ein Zeiger auf ein funktionierendes Beispiel für einen REST-Service mit Spring 3.0, der XML als Ausgabe hat?

Grüße, Gero

Antwort

2

ich in das gleiche Problem auch lief, und wie es mit Frühling arbeitet 3.0 ist bu replaceing/* in der URL-Muster/

+0

Das war Teil der Lösung. Außerdem musste ich die Bean der Bean, die die Ansicht ist, mit der definierten URL ausrichten. Also: und in der Steuerung: @RequestMapping (value = "/ content/...") – Gero

+0

Diese Lösung funktioniert nicht mindestens auf Google App Engine. – pjesi

2

Sie etwas zu tun haben, wie dies:

Andernfalls werden Ihre CSS, JS und Bilder nicht gelöst werden. Ich weiß, es ist scheiße, aber es muss getan werden. Ich maskiere den http://localhost:8080/myapp/rest Teil mit Apache mod_jk sowieso, also ist es egal.

+0

Actully nein. Sie können zum Beispiel Karte * .css zum „default“ Servlet und dass werden Sie Ihre statische Dateien dienen. Für Tomcat siehe http://tomcat.apache.org/tomcat-6.0-doc/default-servlet.html –

Verwandte Themen