java - “#”的 Spring RestTemplate 字符编码
问题描述
我真的很难处理“#”的一些字符编码问题。我正在尝试从 url "URL/path/#" 中 "GET",在参数前面使用 "#"。端点期望 "#" 或 "%23" 的字符编码值。但是, RestTemplate 要么是 a) 不编码“#”,这会导致 API 出现其他异常(API 真的想要“%23”而不是“#”,或者 b)对“%”进行双重编码。我该如何使用RestTemplate 按字面意思发送“%23”。
代码非常简单:
restTemplate.exchange(url, HttpMethod.GET, httpEntityWithSomeAuthHeader,
new ParameterizedTypeReference<SomeObject>() {});
网址如上所述...
谢谢!
解决方案
希望不要迟到;)
试试这个:
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/ ;) 现在我们有了答案
推荐阅读
- marklogic - 如何在 MarkLogic 中对文档中的数据进行非规范化?
- git - 如何在git中的多个分支之间同步
- eclipse-cdt - 液晶显示旧数据和新数据
- facebook-graph-api - 在没有 manage_pages 权限的情况下从 facebook graph API 获取 instagram ID
- reactjs - Meteor 方法如何返回结果?
- angular - 获取 API 响应中的特定对象
- firefox - 如何在 Robot Framework 上打开 Firefox 53
- plugins - Shopify 中使用的插件是什么?
- python - python - 如何将列设置为DataFrame中的索引
- node.js - 如何在信使欢迎屏幕上添加按钮?