java - Spring 启动: Prevent double encoding of % by Resttemplate

标签 java spring-boot spring-mvc

我们的代码使用Asyncresttemplate如下

String uri = http://api.host.com/version/test?address=%23&language=en-US&format=json

getAysncRestTemplate().getForEntity(uri, String.class);

但是 %23 在 Rest 模板中被双​​重编码为​​ %2523 并且 url 变成 http://api.host.com/version/test?address=%2523&language=en-US&format=json, 但我需要传递编码字符串,如果我传递解码数据'#'它不会编码

如何在不对 URL 进行双重编码的情况下发送此请求?

已经尝试使用 UriComponentsBuilder Avoid Double Encoding of URL query param with Spring's RestTemplate

最佳答案

传递给 RestTemplateuri 参数(类型为 String)实际上是一个 URI 模板,如下所示JavaDoc。使用剩余模板而不进行双重编码的方法如下:

getAysncRestTemplate().getForEntity(
        "http://api.host.com/version/test?address={address}&language=en-US&format=json", 
        String.class, 
        "#"); // (%23 decoded)

如果您知道自己已经拥有正确编码的 URL,则可以使用将 URI 作为第一个参数的方法:

restTemplate.getForEntity(
        new URI("http://api.host.com/version/test?address=%23&language=en-US&format=json"),
        String.class);

关于java - Spring 启动: Prevent double encoding of % by Resttemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654417/

相关文章:

java - 初始屏幕填满整个智能手机屏幕,但不裁剪

java - 在表单 {} 中将数组作为参数传递

Swing 应用程序内部的 javax.swing.Timer 与 java.util.Timer

java - 是否可以使用@RequestMapping检查 header 的值

java - Spring Data REST端点消失( hibernate 冲突)

javascript - 获取输入并将其分配给变量的函数

java - 如果有多种可能性,我应该分配什么类型?

java - 使用自定义异常处理测试 REST 端点

Spring Boot - websocket Controller 问题

未调用 Spring Boot Rest API 过滤器