Jersey Queryparam不接受带有" +"的整数值。标志

时间:2016-02-24 17:45:15

标签: 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
}

当我使用+符号传递queryparams时,

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

limit = + 2或offset = + 2。它抛出一个错误。当我尝试调试它时,将值取为{Space} 2(因此它无法将{space} 2映射到int)。它可以正负值(limit = -2或offset = -2)。这与编码有关吗?我错过了什么?

1 个答案:

答案 0 :(得分:2)

是的,它是编码的东西。 ' +'是RFC3986的保留字符,这意味着如果你想要正确理解它,它必须是百分比编码,这对于' +'表示编码为'%2B'。 ' - '字符是明确无保留的,因此泽西岛将其理解为原样。

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

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

应该写得真......

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