如何编码URI参数值?

Gil*_*ili 56 java rest url urlencode rfc2396

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

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

我期待输出:

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

java.net.URLEncoder不会也java.net.URI不会产生正确的输出.URLEncoder用于HTML格式编码,与RFC 2396不同.URI没有一次编码单个值的机制,因此无法知道value1和value2是同一个键的一部分.

Pet*_*aný 30

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

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

  • 如果您不使用JAX-RS并使用Spring,则可以使用Spring的UriUtils (7认同)
  • 您是如何使用UriBuilder生成上述预期输出的?我不知道怎么告诉它在"?"之前对部件进行编码.谢谢! (3认同)

Ada*_*ent 19

你也可以使用Spring的UriUtils


yin*_*ash 9

我没有足够的声誉来评论答案,但我只想注意,单独下载JSR-311 api是行不通的.您需要下载参考实现(平针织).

当api试图在运行时查找实现时,只从JSR页面下载api会给你一个ClassNotFoundException.