Spring boot 2:加号(+)符号未在查询参数中编码

问题描述 投票:0回答:1

目前我正在从spring boot 1.x将我的一个微服务迁移到spring boot 2。考虑有两个服务A和B.服务A调用其余的服务端B.在查询Param服务A中传递一个字母数字字符串,该字符串也包含(+)字符(并不总是因为它是随机生成的字符串)。服务B将此字符串与存储在db中的字符串进行比较并返回响应。

我发现使用版本1.x URL正在编码。防爆。如果我通过(a + b)它被编码为%2Bb并且在服务B中它被解码为(a + b)。但是,对于版本2.x,它仅被编码为(a + b),因此在服务B中它被解码为(a b)[+被解码为空白]

我正在使用UriComponentBuilder来构建用于编码URI的URI和encode()方法。调试时我发现URL中允许使用+字​​符,这就是它不被编码的原因。

我的问题是 - 有没有办法改变这种行为,所以我得+作为%2B。或者,如果我做错了,请将我指向正确的位置。如果需要,我也可以共享代码。

spring spring-boot url-encoding spring-rest spring-web
1个回答
1
投票

spring docs和这个issue你必须“在扩展URI变量之前而不是之后调用编码”。例如。

.encode()
.buildAndExpand("New York", "foo+bar")

回应评论:

如果URL中允许使用+字​​符,那么为什么它会被解码为空格而不是+字符本身

来自w3schools

网址不能包含空格。 URL编码通常用加号(+)或%20替换空格。

© www.soinside.com 2019 - 2024. All rights reserved.