Java 如何避免转义WebTarget查询参数?
我想关闭Jersey请求或某些参数的URL编码 我正在与之交谈的服务器需要Java 如何避免转义WebTarget查询参数?,java,java-8,request,jersey,urlencode,Java,Java 8,Request,Jersey,Urlencode,我想关闭Jersey请求或某些参数的URL编码 我正在与之交谈的服务器需要example.com/path?query=foo:bar 与Jackson WebTarget合作 final WebTarget target = ClientBuilder.newClient() .target(url) .queryParam("query", "{queryVal}") .resolveTemplate("queryVal", "foo:bar"); 遗憾的是,这会产
example.com/path?query=foo:bar
与Jackson WebTarget合作
final WebTarget target = ClientBuilder.newClient()
.target(url)
.queryParam("query", "{queryVal}")
.resolveTemplate("queryVal", "foo:bar");
遗憾的是,这会产生服务器不接受的example.com/path?query=foo bar
我已经为此搜索了很多,唯一有希望的途径似乎是与
javax.ws.rs.core.Configuration
有关,但我还没有深入了解。我发现:解决方案是使用
然后我们有
@Provider
public class Filter implements ClientRequestFilter {
private static final Logger logger = LoggerFactory.getLogger(Filter.class);
@Override
public void filter(ClientRequestContext ctx) throws IOException {
try {
logger.debug("Before: {}", ctx.getUri());
//this is gonna get ugly
ctx.setUri(new URI(
URLDecoder.decode(ctx.getUri().toString(), StandardCharsets.UTF_8.toString())));
logger.debug("After: {}", ctx.getUri());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
输出:
com.example.client.Filter : Before: http://example.com/path?query=foo%3Abar
com.example.client.Filter : After: http://example.com/path?query=foo:bar
尝试以下操作:将
foo:bar
替换为foo%3Abar
com.example.client.Filter : Before: http://example.com/path?query=foo%3Abar
com.example.client.Filter : After: http://example.com/path?query=foo:bar