java - Jersey Queryparam 不接受带有 "+"符号的整数值

标签 java rest encoding jersey jersey-2.0

我有一个方法如下

@GET
@Path("/display")
@Produces(value = { "application/json;qs=1", "application/xml;qs=.5" })
public Response displayItems(@QueryParam("limit") int limit,
                             @QueryParam("offset") int offset){
   //Code to display the requested number of Items
}

当我用 +sign 传递查询参数时,

 http://{host}:{post}/{context}/display?limit=+1&offset=+2

限制=+2 或偏移=+2。它抛出一个错误。当我尝试调试时,它采用 {Space}2 的值(因此它无法将 {space}2 映射到 int)。它适用于负值(limit=-2 或 offset=-2)。这与编码有关吗?我错过了什么?

最佳答案

是的,这是一个编码问题。 '+' 是根据 RFC3986 保留的字符这意味着如果你想让它被正确理解,它必须是百分比编码的,对于“+”意味着编码为“%2B”。 “-”字符是明确未保留的,因此 Jersey 可以按原样理解它。

那么,您的 URI 看起来像...

http://{host}:{post}/{context}/display?limit=+1&offset=+2

真的应该写成...

http://{host}:{post}/{context}/display?limit=%2B1&offset=%2B2

关于java - Jersey Queryparam 不接受带有 "+"符号的整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35609338/

相关文章:

c# - DNN Jwt 授权请求无法从 C# 桌面应用程序运行

java - 通过 REST API 将视频文件发送到 Java 中的 JIRA

使用 libavcodec (FFMpeg) 编码 Speex?

java - 找不到实体

java - Hibernate @OneToMany 由 2 个不同的列映射

java - 如何使用固定宽度的 Swing FlowLayout?

spring - 404 未找到 : Angular 2 can't talk to Spring Rest API

curl - 编码 'utf-8' 的编码序列无效

sockets - 如何通过 Dart TCP 套接字发送原始字节

java - 如何在 Java 中使用 ODBC 将 Excel 文件导入 MySQL?