Java Spring4RESTController调度器url模式
我有一个带注释的rest控制器,如下所示。我能够让服务正常运行,但前提是我在web.xml中为每个服务配置完整路径:Java Spring4RESTController调度器url模式,java,spring,Java,Spring,我有一个带注释的rest控制器,如下所示。我能够让服务正常运行,但前提是我在web.xml中为每个服务配置完整路径: @RestController @RequestMapping("/service/") public class StuffRestController { @RequestMapping("/getStuffList") public List<Stuff> getStuffList() { ... make stuff ...
@RestController
@RequestMapping("/service/")
public class StuffRestController
{
@RequestMapping("/getStuffList")
public List<Stuff> getStuffList() {
... make stuff ...
return stuffList;
}
... many other similar services ...
}
我确信URL映射的创建方法很简单,但我一直在逃避它。问题是您在
DispatcherServlet
和@RestController
请求映射中都包含了路径:/service/getStuffList
。因此,要访问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映射到该路径),则可以将url处理程序映射的AlwaySuseSellPath
属性设置为true
。为此,请将以下内容添加到spring上下文xml文件中:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name = "alwaysUseFullPath" value = "true" />
</bean>
您要点击的URL是什么?“…如果我像在文章中一样配置web.xml,这会很好,但我更希望所有内容/服务/和更低级别的URL模式都是通用的。谢谢您,先生。。。我对映射如何与注释交互有一个误解。你的回答使我得出结论。在这个应用程序中使用“/”并不是一个真正的选项,我们只是为了@RestController的使用添加了spring。我将映射更改为/spring/*,并且[host]/[context]/spring/service/getStuffList现在会像我预期的那样响应。@slambeth,不客气。顺便说一句,您还可以将其映射到/service/*
,并按照我在回答中引用的内容设置属性,只需使用/service/getStuffList
。
{contextPath}/service/getStuffList/service/getStuffList
{contextPath}/service/service/getStuffList
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name = "alwaysUseFullPath" value = "true" />
</bean>