用Java编写URL的内容部分

时间:2013-06-06 07:24:43

标签: java url urlencode url-encoding

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

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

我必须对内容部分进行编码,所以我尝试了这个:

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

tempContent有这个值:这个+是+ test + one 我不想要空格所在的+。空格必须用%20表示

现在,我可以这样做:

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

但是只覆盖空格而我无法控制内容输入。 有没有其他有效的方法来编码Java中的URL内容? URLEncoder没有 做我想做的事。

提前致谢..

2 个答案:

答案 0 :(得分:2)

我终于让它工作了,我用了

  URIUtil.encodeQuery(url);

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

答案 1 :(得分:0)

一种解决方案是使用扩展URI模板的库(这是RFC 6570)。我知道at least one(免责声明:这是我的)。

使用此库,您可以执行以下操作:

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

允许使用地图作为值(在我的实现中这是MapValue; RFC称这些“关联数组”),例如,如果你有一个地图({正确填充的)条目{{1 }},userpasswd,您可以将模板编写为:

text

地图值http://DOMAIN:PORT/sendmsg{?parameters*} 包含:

parameters

这将扩展为:

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