这是UriBuilder的预期行为吗?

时间:2012-01-27 04:33:37

标签: java jersey jax-rs

这就是我正在做的事情(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的行为方式,那么解决方法是什么?

2 个答案:

答案 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

希望有所帮助