Escaping `%` symbol in query parameter in JAX-RS(在JAX-RS中转义查询参数中的`%‘符号)
问题描述
我尝试使用Jersey或RESTEasy中的任何一个发送GET请求,并将某个URL字符串作为参数
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
都转换为空格,字符串被打断。
是否应在将字符串添加为参数之前对其进行转义?
我应该使用什么转义程序来确保它转义了"%..." and template parameters
的所有内容,并且它在参数中转义的所有内容都被服务器成功地取消转义?
JAX
标准推荐答案-RSWebTarget
的解决方案是不直接应用参数,而是将它们作为模板参数应用。
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()
保证对应转义的所有字符进行转义
这篇关于在JAX-RS中转义查询参数中的`%‘符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在JAX-RS中转义查询参数中的`%‘符号
基础教程推荐
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 降序排序:Java Map 2022-01-01