【问题标题】:wrong encoding for "?" character in Rest api“?”的错误编码Rest api中的字符
【发布时间】:2016-09-12 11:56:00
【问题描述】:

我使用 Spring Boot 构建了一个 Rest API,当我使用“?”传递查询时使用查询参数“?”测试get方法的字符字符未编码。

在这里你可以找到我的弹簧控制器。

@RequestMapping(value = "/response/{query}", method =     RequestMethod.GET,headers="Accept=application/json")
public  QueryRep getResponse(@PathVariable("query") String query)
{
     QueryRep test=new QueryRep();
     System.out.println(query);
// code !!
return test;
}

如果我测试例如:我的名字是什么?我得到以下网址: http://localhost:8080/response/what%20is%20my%20name?我在控制台中输入字符串“我的名字是什么”(没有“?”字符)。 如您所见,“?”当 maven (pom.xml) 和 IDE(STS) 配置为使用 UTF-8 时,字符未编码为 UTF-8 %3F。我正在使用 Tomcat 作为 Web 服务器。

【问题讨论】:

    标签: spring-boot encode spring-rest


    【解决方案1】:

    通用 URI 包含以下内容:

    方案:[//[user:password@]host[:port]][/]path[?query][#fragment]

    注意 URI 定义的 ?query 部分(请参阅 https://en.wikipedia.org/wiki/Uniform_Resource_Identifier

    那么 ?是一个保留标记,用于标记路径的结尾和查询字符串的开头。如果你想在你的路径中有一个问号字符,你必须自己用 %3F 对其进行编码,例如:

    http://localhost:8080/response/what%20is%20my%20name%3F

    然后,如果您还需要查询字符串,您可以这样做:

    http://localhost:8080/response/what%20is%20my%20name%3F?myquery=stuff

    【讨论】:

    • 如果'?是 URI 中的有效字符,所以为什么我无法在查询中得到它,我只是得到没有“?”的问题,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多