当前位置: 首页 > 知识库问答 >
问题:

Get request仅适用于尾随斜杠(spring REST注释)

宦烈
2023-03-14

我有一个SpringRest控制器:

@RestController
@RequestMapping(value = "/myresource")
public class MyResourceController {
  ...
}
@RequestMapping(method = GET, value = "/{value1}/{value2}/{value3}", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")    
public ResponseEntity<MyResponseType> getMyResource(
  @ApiParam(value = "...",...)
  @PathVariable("value1") String value1,
  @ApiParam(value = "...",...)
  @PathVariable("value2") String value2,
  @ApiParam(value = "...",...)
  @PathVariable("value3") String value3) {
//...
}
http://myserver:8080/myresource/value1/value2/value3
http://myserver:8080/myresource/value1/value2/value3/

Swagger假设没有尾随斜线,我现在不能用Swagger发送请求。

我该怎么做才能使第一个URL工作而不是第二个?

非常感谢您的评论和回答。

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/j2ee"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>(my) Services</display-name>
<filter>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- Provide ServletContext -->
<listener>
    <listener-class>my.ServletContextUtils</listener-class>
</listener>

<!-- Expose request to current thread (required for session and request-scoping) -->
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            WEB-INF/config/spring-mvc-servlet.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"   xmlns:util="http://www.springframework.org/schema/util"
xmlns:env="http://my/schema"
xsi:schemaLocation="
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.1.xsd
    http://my/schema
    http://my/schema/env-0.3.xsd">

<env:initialization />
<context:annotation-config />
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
<context:component-scan base-package="my.myresource.restapi" />

<context:property-placeholder
    ignore-unresolvable="true"
    location="
        WEB-INF/config/${my.environment}/webapp.properties" />

<!-- Swagger -->

<!-- swagger config -->
<bean class="my.restapi.swagger.SwaggerConfig"/>

webapp.properties包含的内容不多:

swagger.include-pattern=/(?!api-docs|version).*

共有1个答案

甄煜
2023-03-14

我有很多应用程序使用Spring Rest注释,我的API可以使用或不使用尾随斜杠。

这可能是您的Spring MVC配置或您正在使用的http服务器的问题。

您能否发布一些代码片段与您的Spring MVC配置。如果知道您使用的是哪个Spring版本,以及您是如何为WebApp服务的,那将是很好的。

问题似乎出在URL中的点上。

引用:Spring MVC@PathVariable with dot(.)正在被截断

 类似资料:
  • 我要做的是,当用户访问时,应该将他们代理到运行在端口80上的apache。 当我访问时,我会得到正确的结果(index.php)。当我访问时,我会得到正确的结果(404来自apache)。当我访问时,我会得到正确的结果(404来自nginx)。当我访问时,我会得到正确的结果(404来自apache)。 问题是当我访问时。我得到一个301响应,并被重定向到(注意后面的斜杠,当然还有'localhos

  • 问题内容: 我的api要求在api调用后加一个斜杠。我想知道如何以棱角分明的方式实现这一目标。 所以我需要能够访问,或者 我尝试通过以下方式进行访问: 和一个 但结果为或查询。 我怎样才能迫使它总是和 问题答案: 这似乎已得到解决:https : //github.com/angular/angular.js/pull/5560 您现在可以通过以下方式配置它:

  • 我有一个Spring Boot1.3应用程序,其中server.contextpath=/ts处于开发模式。 在浏览器中,我可以访问http://localhost:8888/ts或http://localhost:8888/ts/ 谢了。

  • 当我调用spring-boot应用程序的上下文根“localhost:8080/api/players”时,它通过注释@getmapping(path={“/”,“”})映射到RestController方法中,将alway redirect(httpstatus:307临时redirect)下拖到“localhost:8080/api/players/”,并在末尾添加尾随斜杠。 我的应用程序上下

  • 问题内容: 我正在使用Node.js和Express,并且具有以下路由: 我有一个Disqus小部件上我的课的网页,我注意到一个奇怪的行为是要当和我得到两个不同的网页(对他们都有我以前在Disqus增加,而另一个没有评论评论)。 有没有一种方法可以将我的所有网址“规范化”为不加斜杠?我尝试添加标志来表达,但结果相同 谢谢 问题答案: 尝试为此添加中间件;

  • 我正在阅读Flask quickstart指南,但是使用变量进行路由的示例对我来说并不适用。 http://127.0.0.1:5000/user/bob重定向到http://127.0.0.1:5000/user/bob/给我一个404 我还尝试了与指南中完全相同的代码。我的第一个要点中的错误是意料之中的吗?快速入门版本中的代码应该工作吗?还是我误解了什么? 我使用的是Python 2.7.10