gpt4 book ai didi

java - 在 JAX-RS 中的查询参数中转义 `%` 符号

转载 作者:行者123 更新时间:2023-12-02 10:51:49 24 4
gpt4 key购买 nike

我尝试使用 Jersey 或 Resteasy 中的任何一个发送带有某些 URL 字符串作为参数的 GET 请求

Response response = new ResteasyClientBuilder()
.build()
.target(UriBuilder.fromPath("https://foo.bar"))
.queryParam("url", "http://hostname.com/The%20URL%20with spaces.jpg")
.request()
.get();

两种实现都发送
https://foo.bar?url=http%3A%2F%2Fhostname.com%2FThe%20URL%20with%20spaces.jpg

我假设原始空格已使用 %20 进行转义,并且原始 %20 在查询参数中进行了两次转义。
但事实并非如此。
原始空格和 %20 混合在一起,在服务器端,我得到未转义的字符串,所有 %20 都转换为空格,并且字符串被破坏。

根据source code of Resteasy ,它“保持编码值“%...”和模板参数完好无损”。但我在 JEE 文档中没有找到任何有关此行为的文字。

在将字符串添加为参数之前是否应该对其进行转义?
我应该使用什么转义器来确保它转义所有 "%..."和模板参数,并且参数中转义的所有内容都被服务器成功转义?

最佳答案

标准 JAX-RS WebTarget 的解决方案是不直接应用参数,而是将它们作为模板参数应用。

Response response = new ResteasyClientBuilder()
.build()
.target(UriBuilder.fromPath("https://foo.bar"))
.queryParam("url", "{urlTemplate}")
.resolveTemplate("urlTemplate", "http://hostname.com/The%20URL%20with spaces.jpg")
.request()
.get();

首先,我们添加一些模板{urlTemplate}作为参数值,然后用真实值渲染这个模板。
WebTarget 始终假定给定参数作为可能的模板,并且不会转义某些字符
但是 .resolveTemplate() 保证转义所有应该转义的字符

关于java - 在 JAX-RS 中的查询参数中转义 `%` 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com