2009-06-03 71 views
3

我試圖得到一個簡單的REST服務與Spring 3.0的工作,但保留撞到阻塞錯誤:春3.0 REST實現的DispatcherServlet無法找到映射

沒有映射發現與URI的HTTP請求[/旅遊/美國/紐約/ SFO /1122分之20091010/真/]在DispatcherServlet的名爲 '調度' *

然而,在日誌文件中還指出:

org.springframework.web.servlet.mvc.annotation .Def aultAnnotationHandlerMapping - 將映射的URL路徑[/ travel/us/{from}/{to}/{date}/{time}/{departure} /]拖放到handler [[email protected]] *

我讀的是一個指示,說明從URI到experiment.SomeController類作爲處理程序的映射。

我必須忽略其中一個配置文件中的一個簡單錯誤,但是在多次檢查所有內容並做了相當多的Google搜索之後,我還沒有找到解決方案。我已經開啓了Spring類的日誌記錄,但是這也沒有揭示這個問題。

下面是相關的配置文件和一些代碼片段,任何幫助都是有效的。該webapp部署到Glassfish v2.1,我在OS X上使用JDK1.5上Spring 3.0.0的M3版本。

目標是讓getTripDetails()返回XML版本的tripdetails 。因此使用MarshallingView。

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

從調度員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> 

控制器類: @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; 

}

}

上出了什麼問題有什麼想法?或者是一個指向Spring 3.0的REST服務的工作示例的指針,其中包含XML作爲輸出?

問候, 呂

回答

2

我也遇到同樣的問題,它的工作原理與Spring 3.0的方式是BU保換/ *中的url-pattern爲/

+0

這是解決方案的一部分。除此之外,我還必須將視圖bean的bean與定義的URL對齊。因此: and in the controller: @RequestMapping(value =「/ content/...」) – Gero 2009-07-02 05:59:04

+0

此解決方案至少不適用於Google App Engine。 – pjesi 2009-09-23 10:42:08

2

你必須做一些像這個:

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

否則你的CSS,JS和圖像不會得到解決。我知道這很糟糕,但必須完成。無論如何,我用apache mod_jk掩蓋http://localhost:8080/myapp/rest部分,所以它沒有關係。

相關問題