用jvm语言修正url编码

时间:2015-06-02 16:20:09

标签: java regex apache uri

我知道有几十个相似的主题,但我没有找到回答我的问题。

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

使用apache +时,

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

那么如何通过应用更少的努力来克服这项任务呢?

2 个答案:

答案 0 :(得分:1)

使用URI templates

使用URI模板所谓的关联数组。

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

答案 1 :(得分:0)

通过准备适当的正则表达式来解析参数及其值,我找到了解决问题的方法。也许解决方案不是那么优雅,但它解决了我的问题。 因此,假设{}包含可能包含内部符号的符号,""也是这样的符号(除了它们不能包含在内部),正则表达式如下所示: ((\w+)=(\{.*?\}(?=&)|\{.*\}|".*"|\w+))&{0,1}

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