如何对 URI 参数值进行编码?

2022-08-31 17:21:29

我想发送一个URI作为查询/矩阵参数的值。在将其附加到现有URI之前,我需要根据RFC 2396对其进行编码。例如,给定输入:

http://google.com/resource?key=value1 & value2

我期望输出:

http%3a%2f%2fgoogle.com%2fresource%3fkey%3dvalue1%2520%26%2520value2

两者都不会产生正确的输出。 用于 HTML 表单编码,这与 RFC 2396 不同。 没有一次编码单个值的机制,因此它无法知道值 1 和值 2 是同一键的一部分。java.net.URLEncoderjava.net.URIURLEncoderURI


答案 1

Jersey 的 UriBuilder 根据需要使用 application/x-www-form-urlencoded 和 RFC 3986 对 URI 组件进行编码。根据Javadoc

生成器方法按照查询参数的应用程序/x-www-form-urlencoded 媒体类型的规则和所有其他组件的 RFC 3986 的规则,对相应 URI 组件中不允许的字符执行上下文编码。请注意,只有特定组件中不允许的字符才会被编码,因此,例如,提供给其中一个路径方法的路径可能包含矩阵参数或多个路径段,因为分隔符是合法字符并且不会被编码。在允许的情况下,也会识别百分比编码值,并且不会进行双重编码。


答案 2

你也可以使用Spring的UriUtils。