猿问

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

我尝试使用 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转换为空格,并且字符串被破坏。


根据Resteasy 的源代码,它“保持编码值“%...”和模板参数完整”。但是我在 JEE 文档中没有找到任何关于这种行为的词。


我应该在将字符串添加为参数之前对其进行转义吗?

我应该使用什么转义器来确保它转义所有"%..." and template parameters,并且它在参数中转义的所有内容都被服务器成功转义?


侃侃尔雅
浏览 145回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答