3

我正在尝试让一个简单的 REST 服务与 Spring 3.0 一起使用,但不断遇到阻塞错误:

在名称为“dispatcher”的 DispatcherServlet 中找不到具有 URI [/travel/us/nyc/sfo/20091010/1122/true/] 的 HTTP 请求的映射*

但是,在日志文件中它还指出:

org.springframework.web.servlet.mvc.annotation.Def aultAnnotationHandlerMapping - 将 URL 路径 [/travel/us/{from}/{to}/{date}/{time}/{departure}/] 映射到处理程序 [experiment. SomeController@dd9f85]*

我读到这表明存在从 URI 到 Experiment.SomeController 类作为处理程序的映射。

我一定是忽略了其中一个配置文件中的一个简单错误,但是在检查了所有内容并进行了相当多的谷歌搜索之后,我还没有找到解决方案。我已经为 Spring 类打开了日志记录,但这也没有揭示问题。

以下是相关的配置文件和一些代码片段,请提供任何帮助。webapp 部署到 Glassfish v2.1,我在 OS X 的 JDK1.5 上使用 Spring 3.0.0 的 M3 构建。

目标是让 getTripDetails() 返回行程详细信息的 XML 版本。因此使用 MarshallingView。

来自 web.xml:

<小服务程序>
<servlet-name>调度程序</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet 映射>
<servlet-name>调度程序</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

从 dispatcher-servlet.xml 中:

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

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

<bean id="viewResolver" class="org.springframework.web.servlet.view.Content tNegotiatingViewResolver">
<属性名称="媒体类型">
<地图>
<entry key="xml" value="application/xml"/>
</地图>
</属性>
<property name="viewResolvers">
<列表>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</豆>
</列表>
</属性>
</豆>

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

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

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

}

}

有什么想法吗?或者指向具有 XML 作为输出的 Spring 3.0 的 REST 服务的工作示例的指针?

问候,格罗

4

2 回答 2

2

我也遇到了同样的问题,它与 Spring 3.0 一起使用的方式是将 url-pattern 中的 /* 替换为 /

于 2009-06-30T09:34:40.743 回答
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部分,所以没关系。

于 2009-11-26T22:00:14.620 回答