对于以下示例(使用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"
有没有理由,为什么只有+被自动转义?是否有一种简单的方法可以使所有查询参数完全解码,而不必在每种方法开始时都这样做?
答案 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.
}
}
}
虽然它可能不是一个漂亮的解决方案,但它确实有效。