“?”的错误编码休息中的角色 api
wrong encoding for "?" character in Rest api
我用 Spring 引导构建了一个 Rest API,当我用“?”传递查询时使用查询参数“?”测试 get 方法的字符字符未编码。
在这里你可以找到我的 spring 控制器。
@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;
}
如果我测试例如:我叫什么名字?我得到以下 url:
http://localhost:8080/response/what%20is%20my%20name?然后我在我的控制台中得到字符串 "what is my name" (没有“?”字符)。
如您所见,“?”字符未编码为 UTF-8 %3F,而 Maven (pom.xml) 和 IDE(STS) 配置为使用 UTF-8。我正在使用 Tomcat 作为网络服务器。
通用 URI 包含以下内容:
scheme:[//[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
我用 Spring 引导构建了一个 Rest API,当我用“?”传递查询时使用查询参数“?”测试 get 方法的字符字符未编码。
在这里你可以找到我的 spring 控制器。
@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;
}
如果我测试例如:我叫什么名字?我得到以下 url: http://localhost:8080/response/what%20is%20my%20name?然后我在我的控制台中得到字符串 "what is my name" (没有“?”字符)。 如您所见,“?”字符未编码为 UTF-8 %3F,而 Maven (pom.xml) 和 IDE(STS) 配置为使用 UTF-8。我正在使用 Tomcat 作为网络服务器。
通用 URI 包含以下内容:
scheme:[//[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