【问题标题】:Spring boot 2: Plus (+) sign is not getting encoded in query paramSpring boot 2:加号(+)未在查询参数中编码
【发布时间】:2019-08-03 11:31:05
【问题描述】:

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

我观察到 1.x 版本的 URL 得到了正确编码。前任。如果我通过 (a+b),它会被编码为 a%2Bb,而在服务 B 中,它会被解码为 (a+b)。但是,在 2.x 版本中,它仅被编码为 (a+b),因此在服务 B 中它被解码为 (a b) [+ 被解码为空白]

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

我的问题是 - 有没有办法改变这种行为,以便我得到 + 作为 %2B 。或者,如果我做错了什么,请指出我正确的地方。 如果需要,我也可以分享代码。

【问题讨论】:

    标签: spring spring-boot url-encoding spring-rest spring-web


    【解决方案1】:

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

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

    回应评论:

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

    来自w3schools

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

    【讨论】:

    • 我还在想一点。如果 URL 中允许使用 + 字符,那么为什么它会被解码为空格而不是 + 字符本身。如果你能回答。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2021-09-15
    • 2018-09-04
    • 2020-10-21
    • 2020-10-26
    • 2018-10-02
    • 2018-11-22
    相关资源
    最近更新 更多