首页 > 解决方案 > “#”的 Spring RestTemplate 字符编码

问题描述

我真的很难处理“#”的一些字符编码问题。我正在尝试从 url "URL/path/#" 中 "GET",在参数前面使用 "#"。端点期望 "#" 或 "%23" 的字符编码值。但是, RestTemplate 要么是 a) 不编码“#”,这会导致 API 出现其他异常(API 真的想要“%23”而不是“#”,或者 b)对“%”进行双重编码。我该如何使用RestTemplate 按字面意思发送“%23”。

代码非常简单:

restTemplate.exchange(url, HttpMethod.GET, httpEntityWithSomeAuthHeader, 
    new ParameterizedTypeReference<SomeObject>() {}); 

网址如上所述...

谢谢!

标签: javaspringspring-rest

解决方案


希望不要迟到;)

试试这个:

URI uri = new URI(url);
restTemplate.exchange(uri, HttpMethod.GET, httpEntityWithSomeAuthHeader, 
new ParameterizedTypeReference<SomeObject>() {}); 

重要的是,在 url 参数中使用 %23。似乎如果您使用#(带有字符串或uri)它会在之后丢弃......但是使用%23和“新URI”它会放入查询(在uri内部作为%23)并且服务器解码为#。

希望对您有所帮助;)

PD:当我们看到您回答的问题时,一位同事想起了我这个https://xkcd.com/979/ ;) 现在我们有了答案


推荐阅读