2009-06-03 72 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部分,所以它没有关系。

相关问题