更正 url jvm 语言编码

Correct url encoding in jvm languages

我知道有几十个类似的话题,但我没有找到对回答我的问题有用的东西。

假设我有一个 url http://example.com/a/b?param1=1&param2={"a": "b"}&param3="&=+%"

+= 符号在使用 apache UriUril.encodeQuery 时不会被编码。使用 URLEncoder.encode 时,它们确实会被编码,但在那种情况下,我必须单独对每个参数值进行编码(因此我需要获取参数及其值的映射)。如您所见,在 &= 上简单地拆分 url 字符串在这种情况下不起作用。

那么如何以更少的努力完成这项任务呢?

通过使用 URI templates.

使用你所拥有的 URI 模板称为关联数组。

Java中存在实现;其中之一是 mine(对自我广告感到抱歉)。

我已经通过准备适当的正则表达式来解析参数及其值找到了解决我的问题的方法。也许解决方案并不像它必须的那样优雅,但它解决了我的问题。 因此,假设 {} 包含可能在内部包含任何符号的符号,并且 "" 也是这样的符号(除非它们不能包含自己)正则表达式看起来像: ((\w+)=(\{.*?\}(?=&)|\{.*\}|".*"|\w+))&{0,1}

此类正则表达式的输入必须是 url 的查询字符串。在每个第 2 组中将有参数名称,在每个第 3 组中 - 参数值