java uri 参数_java – 使用UriComponentsBuilder编码查询参数

我正在努力理解UriComponentsBuilder的行为.我想用它来对查询参数中的URL进行编码,但它似乎只是转义%字符,而不是其他必要的字符,例如&amp ;.

查询参数中未完全编码的URL示例:

UriComponentsBuilder.fromUri("http://example.com/endpoint")

.queryParam("query", "/path?foo=foo&bar=bar")

.build();

输出:http://example.com/endpoint?query = / path?foo = foo& bar = bar

这是不正确的,因为未编码的&导致bar = bar被解释为/ endpoint而不是/ path的查询参数.

但是,如果我使用包含%字符的输入::

UriComponentsBuilder.fromUri("http://example.com/endpoint")

.queryParam("query", "/path?foo=%20bar")

.build();

输出:http://example.com/endpoint?query = / path?foo =%20bar

%字符被转义.

UriComponentsBuilder会自动转义%字符而不是其他保留字符似乎不一致.

使用UriComponentsBuilder将URL编码为查询参数的正确过程是什么?

解决方法:

>您使用时语法不正确

UriComponentsBuilder.fromUri()用String参数代替

一个URI.如果要将URL作为String传递,请将其用作:

UriComponentsBuilder

.fromUriString("http://example.com/endpoint")

.queryParam("query", URLEncoder.encode("/path?foo=%20bar","UTF-8"))

.build();

>&是一个有效的URL字符,所以它不会被编码,但%不是它的原因

被解码为%.

标签:java,spring,url-encoding,query-parameters

来源: https://codeday.me/bug/20190527/1162994.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值