为什么UriInfo.getQueryParameters()解码'+'?

时间:2015-04-23 12:58:07

标签: java java-ee jax-rs apache-wink

我知道我可以解决这个问题,但是如果使用带注释的查询参数,与将参数拉出参数映射(应该根据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);

1 个答案:

答案 0 :(得分:1)

根据仅UrlInfo.getQueryParameters的Javadocs&#34;参数名称和值中的转义八位字节的序列被解码&#34;。

另一方面,QueryParam Javadocs指出&#34;值 URL解码,除非使用Encoded注释&#34;

所以,回答你的问题,它看起来像一个规范决定。

无论如何,也许你应该在JAX-RS mailing lists上提出讨论。