为什么 UriInfo.getQueryParameters() 不解码“+”?
Why doesn't UriInfo.getQueryParameters() decode '+'?
我知道我可以解决这个问题,但是与将参数从参数映射中拉出(应该根据 javadoc 进行解码)相比,如果使用带注释的查询参数,行为会有所不同,这似乎很奇怪).这是一个错误,还是一个怪癖?
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public Response getAssets(@Context UriInfo info, @QueryParam("q") String searchQuery) {
// The request URI is http://myhost.com/appRoot?q=foo+bar%20baz
// At this point seachQuery="foo bar baz"
// The + has been decoded (along with any % encoded characters)
// Here searchQuery2="foo+bar baz", the '+' has not been decoded
// but the %20 has been
MultivaluedMap<String, String> params = info.getQueryParameters();
String searchQuery2 = params.get("q").get(0);
根据 UrlInfo.getQueryParameters
的 Javadocs 仅 "sequences of escaped octets in parameter names and values are decoded"。
另一方面,QueryParam Javadocs states that "Values are URL decoded unless this is disabled using the Encoded 注释。
所以,回答你的问题,它看起来像是一个规范决定。
无论如何,也许你应该在 JAX-RS mailing lists 上提出那个讨论。
我知道我可以解决这个问题,但是与将参数从参数映射中拉出(应该根据 javadoc 进行解码)相比,如果使用带注释的查询参数,行为会有所不同,这似乎很奇怪).这是一个错误,还是一个怪癖?
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public Response getAssets(@Context UriInfo info, @QueryParam("q") String searchQuery) {
// The request URI is http://myhost.com/appRoot?q=foo+bar%20baz
// At this point seachQuery="foo bar baz"
// The + has been decoded (along with any % encoded characters)
// Here searchQuery2="foo+bar baz", the '+' has not been decoded
// but the %20 has been
MultivaluedMap<String, String> params = info.getQueryParameters();
String searchQuery2 = params.get("q").get(0);
根据 UrlInfo.getQueryParameters
的 Javadocs 仅 "sequences of escaped octets in parameter names and values are decoded"。
另一方面,QueryParam Javadocs states that "Values are URL decoded unless this is disabled using the Encoded 注释。
所以,回答你的问题,它看起来像是一个规范决定。
无论如何,也许你应该在 JAX-RS mailing lists 上提出那个讨论。