小编Mon*_*rlo的帖子

如何强制URIBuilder.path(...)编码像"%AD"这样的参数?此方法并不总是正确地使用百分比编码参数

如何强制URIBuilder.path(...)编码参数如"%AD"

的方法path,replacePathsegmentURIBuilder并不总是编码参数与百分比,正确.

当参数包含字符"%"后跟两个字符一起形成URL编码字符时,"%"不会编码为"%25".

例如

URI uri = UriBuilder.fromUri("https://dummy.com").queryParam("param", "%AD");
String test = uri.build().toString();
Run Code Online (Sandbox Code Playgroud)

"test"是" https://dummy.com?param=%AD "
但它应该是" https://dummy.com?param=%25AD "(字符"%"编码为"%25")

UriBuilderImpl.queryParam(...)当"%"后面的两个字符是十六进制时,该方法的行为与此类似.即,方法"com.sun.jersey.api.uri.UriComponent.isHexCharacter(char)"对于"%"之后的字符返回true.

我认为UriBuilderImpl的行为是正确的,因为我猜它试图不编码已编码的参数.但在我的场景中,我永远不会尝试使用已经编码的参数创建URL.

我该怎么办?

我的Web应用程序使用新泽西州,在许多地方我建立一个使用类UriBuilder的URI或调用该方法getBaseUriBuilderUriInfo对象.

每次调用方法时queryParam,我都可以用"%25"替换"%" ,replaceQueryParam或者segment.但我正在寻找一个不那么麻烦的解决方案.

如何让Jersey返回我自己的UriBuilder实现?

我想过创建一个扩展UriBuilderImpl的类来覆盖这些方法,并在调用之前执行此替换super.queryParam(...)或其他任何操作.

在调用UriBuilder.fromURL(...)UriInfo.getBaseUriBuilder(...)等时,有没有办法让Jersey返回我自己的UriBuilder而不是UriBuilderImpl ?

看看这个方法RuntimeDelegate,我想到了扩展RuntimeDelegateImpl.我的实现将覆盖该方法createUriBuilder(...),该方法将返回我自己的方法UriBuilder,而不是UriBuilderImpl.然后,我会添加文件,META-INF/services/javax.ws.rs.ext.RuntimeDelegate并在其中,我的完整的类名称RuntimeDelegateImpl.

问题是jersey-bundle.jar已包含META-INF/services/javax.ws.rs.ext.RuntimeDelegate指向的内容com.sun.jersey.server.impl.provider.RuntimeDelegateImpl,因此容器加载该文件而不是my javax.ws.rs.ext.RuntimeDelegate.因此,它不会加载我的RuntimeDelegate实现. …

jax-rs jersey jersey-1.0

17
推荐指数
3
解决办法
3万
查看次数

标签 统计

jax-rs ×1

jersey ×1

jersey-1.0 ×1