Java Spring4RESTController调度器url模式

Java Spring4RESTController调度器url模式,java,spring,Java,Spring,我有一个带注释的rest控制器,如下所示。我能够让服务正常运行,但前提是我在web.xml中为每个服务配置完整路径: @RestController @RequestMapping("/service/") public class StuffRestController { @RequestMapping("/getStuffList") public List<Stuff> getStuffList() { ... make stuff ...

我有一个带注释的rest控制器,如下所示。我能够让服务正常运行,但前提是我在web.xml中为每个服务配置完整路径:

@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>