Spring 4 RestController Dispatcher url-pattern

时间:2015-04-06 16:19:59

标签: java spring

我有一个带注释的休息控制器,如下所示。我能够很好地获得托管服务,但前提是我在web.xml中为每个服务配置完整路径:

@RestController
@RequestMapping("/service/")
public class StuffRestController
{
    @RequestMapping("/getStuffList")
    public List<Stuff> getStuffList() { 
      ... make stuff ...
      return stuffList;
    }

    ... many other similar services ...
}

这是我应用程序中唯一的弹簧资源;虽然,我们正在使用弹簧安全。

以下是spring4-servlet.xml的唯一行:

<mvc:annotation-driven />  

<context:component-scan base-package="com.me.stuff.presentation.controller" />  
<context:component-scan base-package="com.me.stuff.security" />

StuffRestController类位于&#34; ... controller&#34;封装

的web.xml:

 <servlet>    
  <servlet-name>spring4</servlet-name>    
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/spring4-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>    
 </servlet>
 <servlet-mapping>    
  <servlet-name>spring4</servlet-name>    
  <url-pattern>/service/getStuffList</url-pattern>   
 </servlet-mapping> 

以上所有实际上都运行良好和花花公子,但在这个控制器中有30个其他服务,我宁愿不为每个方法创建一个新的servlet映射。当我尝试&#34;通配符&#34;映射。我已尝试过/ service / ,/ service 和/ service / *。以及许多其他组合。

大部分内容都没有正确映射,我收到404错误。如果我使用/ service / *,它会在调用/ service / getStuffList时使用调度程序servlet,但它会响应:

WARNING: No mapping found for HTTP request with URI [/myapp/service/getStuffList] in DispatcherServlet with name 'spring4'

我确定这对于如何创建URL映射非常简单,但它让我不知所措。

1 个答案:

答案 0 :(得分:6)

问题是您在/service/getStuffListDispatcherServlet请求映射中包含了路径:@RestController。因此,要访问其余控制器方法,您需要访问以下URL:

{contextPath}/service/getStuffList/service/getStuffList

因此,要么将调度程序servlet url-pattern更改为/,那么它将处理进入应用程序的每个请求,然后基于myApp之后的路径,将重定向到适当的控制器。或者,将RestController映射设置为/*。你应该更喜欢前一种方法。

如果您希望将{servlet句柄请求发送到/service,请将网址格式更改为/service/*。但是,您必须从类级别删除所有请求映射。另外在当前情况下,您需要点击以下网址:

{contextPath}/service/service/getStuffList

但是,如果要在路径解析中包含调度程序servlet url-pattern(即,您希望将类映射到/service并将servlet映射到该路径),则可以设置{{1} }属性到URL处理程序映射的alwaysUseFullPath。为此,请将以下内容添加到spring context xml文件中:

true
相关问题