这就是我正在做的事情(JAX-RS 1.0,Jersey 1.11):
import javax.ws.rs.core.UriBuilder;
System.out.println(UriBuilder.fromPath("/").queryParam("x", "%40").build());
System.out.println(UriBuilder.fromPath("/").queryParam("x", "100%").build());
预期:
/?x=%2540
/?x=100%25
但实际输出是:
/?x=%40
/?x=100%25
发生了什么事?如果这是UriBuilder
的行为方式,那么解决方法是什么?
答案 0 :(得分:2)
我很惊讶,但这就是它的工作原理:
UriBuilder.fromUri("/").queryParam("x", "{value}").build(/* any text */);
答案 1 :(得分:0)
问题可能是有一种额外的方法可以从编码的字符串构建URI:
来自Javadocs: build():“字符串化值中的所有'%'字符都将被编码。构建器的状态不受影响”
buildFromEncoded():“字符串化值中未跟随两个十六进制数字的所有%字符都将被编码。”
URIBuilder.buildFromEncoded()
:
http://jsr311.java.net/nonav/javadoc/javax/ws/rs/core/UriBuilder.html#buildFromEncoded%28java.lang.Object...%29?
希望有所帮助