我有一个带注释的rest控制器,如下所示。我能够让这些服务很好地托管,但前提是我必须为web.xml中的每个服务配置完整的路径:
@RestController
@RequestMapping("/service/")
public class StuffRestController
{
@RequestMapping("/getStuffList")
public List<Stuff> getStuffList() {
... make stuff ...
return stuffList;
}
... many other similar services ...
}这确实是我的应用程序中唯一的spring资源;不过,我们使用的是spring安全性。
下面是惟一的spring4 4-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类驻留在"...controller“包中。
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映射。当我尝试“通配符”映射时,会出现此问题。我尝试过/service/、/service和/service/*。还有很多其他的组合。
大多数情况下,都没有正确地映射,而且我收到404个错误。如果我使用/service/*,则在调用/service/getStuffList时,它将调用dispatcher servlet,但它的响应是:
WARNING: No mapping found for HTTP request with URI [/myapp/service/getStuffList] in DispatcherServlet with name 'spring4'我确信这与URL映射的创建方式是很简单的,但这是在逃避我。
发布于 2015-04-06 16:27:37
问题是您已经在/service/getStuffList和DispatcherServlet请求映射中都包含了path:@RestController。因此,要访问rest控制器方法,您必须点击以下URL:
{contextPath}/service/getStuffList/service/getStuffList因此,要么将dispatcher servlet url模式更改为/,这样它将处理传入应用程序的每个请求,然后根据myApp后的路径将其重定向到适当的控制器。或者,将RestController映射设置为/*。你应该更喜欢前一种方法。
如果您想让servlet句柄请求出现在/service上,那么将url模式更改为/service/*。但是,您必须从类级别删除所有请求映射。否则,在当前情况下,您必须访问以下url:
{contextPath}/service/service/getStuffList但是,如果希望在路径解析中包括dispatcher servlet URL模式(即您希望在/service映射类并将servlet映射到该路径),则可以将alwaysUseFullPath属性设置为alwaysUseFullPath处理程序映射的true。为此,将以下内容添加到spring上下文xml文件中:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name = "alwaysUseFullPath" value = "true" />
</bean>https://stackoverflow.com/questions/29475137
复制相似问题