java - 如何使用 spring boot 抑制 url 编码

标签 java spring spring-mvc encoding spring-boot

我使用 Spring boot 创建了一个 GET/POST API,它有一个 http url 参数,比如 refid。现在这个参数在调用 GET/POST 请求之前已经被编码
例如http://localhost:8080/users/TESTFNkJXiQAH%2FJBKxigBx

但是,当我通过 Spring Boot 部署它时,编码的 refid 会再次编码并且 refid 发生变化。即它变成:

http://localhost:8080/users/TESTFNkJXiQAH%252FJBKxigBx

我想通过 Spring Boot 抑制第二个编码。有人可以在这里建议吗?

最佳答案

不知道您是否仍然遇到这个问题,或者您是否找到了它发生的原因,但是因为我试图向某人解释这种现象,所以我查看了是否已经有一个很好的解释。但既然你也问了,我没有找到,这是我的答案。

所以你编码你的 refid

TESTFNkJXiQAH%2FJBKxigBx



在您通过 url 发送它之前,然后您将其提供给浏览器。现在这只是编码的 refid。当您直接通过 URL 调用它时,您必须根据 HTML URL 编码标准再次对其进行编码。这就是双重逃生的原因。另请阅读 this .例如。所以如果你的 refid 看起来像这样

test%123



你编码它,你把它变成

test%25123



现在,如果您还想通过浏览器上的 url 传递它,则必须再次对其进行编码。

test%2525123



但是如果服务 A 正在使用这个服务并且服务 A 正确地编码了这个 refid,那么你就不会遇到这个问题。发生这种情况只是因为您试图通过浏览器调用此 api 端点。

当然,我认为你这样做是理所当然的:
String decoded = URLDecoder.decode(refid, "UTF-8");

在你的 Controller 中

关于java - 如何使用 spring boot 抑制 url 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348836/

相关文章:

java - Pyspark 列表到 Scala 序列

Java 多线程不清楚

SpringBoot : how to inject two classes having same name

java - Cookie CsrfTokenRepository.withHttpOnlyFalse() 做什么以及何时使用它?

java - 来自 Hibernate 的 UTF-8

java - 在 Solr 组件的准备方法中执行分布式搜索

java - 对象引用未保存的 transient 实例 - 在刷新 : com. entity.Role 之前保存 transient 实例

java - Spring Batch Java Config 事务属性等效项

具有 "generic"字段的 Java 对象

Spring 请求映射通配符异常