Jersey:使用百分比编码解码QueryParam

时间:2014-05-27 22:21:48

标签: java jersey jersey-2.0

对于以下示例(使用Jersey 2.6),未解码百分比编码的查询参数,相反,a +由空格替换。

@Path("test")
public class TestResource {
    @Path("/")
    @GET
    public void test(@QueryParam("param") String param) {
        System.out.println(param);
    }
}

// http://localhost:8080/test?param=hello+world // prints "hello world"
// http://localhost:8080/test?param=hello%20world // prints "hello%20world"

有没有理由,为什么只有+被自动转义?是否有一种简单的方法可以使所有查询参数完全解码,而不必在每种方法开始时都这样做?

1 个答案:

答案 0 :(得分:1)

在我的解决方案中,我禁用查询参数的自动解码,然后自己执行。

@Path("test")
public class TestResource {
    @Path("/")
    @GET
    public void test(@Encoded @QueryParam("param") String param) {
        try {
            param = URLDecoder.decode(param, "UTF-8").replace("+", " ");
            System.out.println(param);
        } catch (UnsupportedEncodingException e) {
            // The exception should never happened since UTF-8 is definitely
            // supported.
        }
    }
}

虽然它可能不是一个漂亮的解决方案,但它确实有效。