gpt4 book ai didi

java - Spring 4 RestController 调度程序 url 模式

转载 作者:搜寻专家 更新时间:2023-11-01 02:07:12 25 4
gpt4 key购买 nike

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

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

... many other similar services ...
}

这确实是我应用程序中唯一的 spring 资源;虽然,我们正在使用 spring security。

下面是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 类位于“...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>

以上所有实际上都工作得很好而且花花公子,但是这个 Controller 中还有 30 个其他服务,我不想为每个方法都创建一个新的 servlet 映射。当我尝试“通配”映射时会出现此问题。我试过/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 映射的创建方式来说很简单,但我却无法理解。

最佳答案

问题是您在 DispatcherServlet@RestController 请求映射中都包含了路径:/service/getStuffList。因此,要访问其余 Controller 方法,您必须点击以下 URL:

{contextPath}/service/getStuffList/service/getStuffList

因此,要么将调度程序 servlet url-pattern 更改为 /,这样它将处理到达您的应用程序的每个请求,然后根据 myApp 之后的路径,将重定向到适当的 Controller 。或者,将 RestController 映射设置为 /*。您应该更喜欢前一种方法。

如果您想让 servlet 处理来自 /service 的请求,请将 url-pattern 更改为 /service/*。但是你必须从类级别删除所有请求映射。否则在当前情况下,您必须点击以下网址:

{contextPath}/service/service/getStuffList

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

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

关于java - Spring 4 RestController 调度程序 url 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com