在java中对url的内容部分进行编码

ao218c7q  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(333)

我有一个带有可替换值的url字符串:

http://DOMAIN:PORT/sendmsg?user=test&passwd=test00&text={CONTENT}

我必须对内容部分进行编码,所以我尝试了以下方法:

String tempContent = URLEncoder.encode(content, "UTF-8");

tempcontent有一个值:this+is+test+one我不想要+where spaces。空格必须用%20表示
现在,我可以做到:

String tempContent = content.replaceAll(" ", "%20");

但这只覆盖了空间,我无法控制内容输入。有没有其他有效的方法来编码java中的url内容?urlencoder不符合我的要求。
提前谢谢。。

xt0899hw

xt0899hw1#

我终于成功了,我用

URIUtil.encodeQuery(url);

使用%20正确编码的空格。这来自apachecommons httpclient项目。

7uhlpewt

7uhlpewt2#

一种解决方案是使用扩展uri模板的库(这是rfc6570)。我至少知道一个(免责声明:这是我的)。
使用此库,可以执行以下操作:

final URITemplate template
    = new URITemplate("http://DOMAIN:PORT/sendmsg?user=test&passwd=test00&text={CONTENT}");

final VariableValue value = new ScalarValue(content);

final Map<String, VariableValue> vars = new HashMap<String, VariableValue>();
vars.put("CONTENT", value);

// Obtain expanded template
final String s = template.expand(vars);

// Now build a URL out of it

允许将Map作为值(这是一个 MapValue 在我的执行中;rfc称这些为“关联数组”),例如,如果您有一个包含 user , passwd 以及 text ,您可以将模板编写为:

http://DOMAIN:PORT/sendmsg{?parameters*}

具有Map值 parameters 包含:

"user": "john",
"passwd": "doe",
"content": "Hello World!"

这将扩展为:

http://DOMAIN:PORT/sendmsg?user=john&passwd=doe&content=Hello%20World%21

相关问题