为了账号安全,请及时绑定邮箱和手机立即绑定

AsyncRestTemplate '#' 在查询参数中对编码进行签名

AsyncRestTemplate '#' 在查询参数中对编码进行签名

开满天机 2022-09-07 21:02:42
我正在使用AsyncRestTemplate从Springboot 1.5.2服务对Google Maps进行API调用。不幸的是,我的一些搜索字符串包含井号/主题标签符号,并且在我的搜索参数中没有正确编码。我正在使用交换方法。#地址示例如下:05406, VT, BURLINGTON, 309 College St #10@Servicepublic class ExampleAsyncRestTemplate {    private AsyncRestTemplate asyncRestTemplate;    @Autowired    public ExampleAsyncRestTemplate() {        this.asyncRestTemplate = new AsyncRestTemplate();    }    public ListenableFuture<ResponseEntity<T>> getGeoCodedAddress() {         String googleUrl = "https://maps.googleapis.com/maps/api/geocode/json?address=05406, VT, BURLINGTON, 309 College St #10&key=some_key";         Map<String, String> uriVariables = new HashMap<>();         uriVariables.put("address", "05406, VT, BURLINGTON, 309 College St #10");         uriVariables.put("key", "some_key");         return asyncRestTemplate.exchange(googleUrl, HttpMethod.GET, new HttpEntity<>(), GoogleResponse.class, uriVariables);    }}生成的 URL 编码为:https://maps.googleapis.com/maps/api/geocode/json?address=05406,%20VT,%20BURLINGTON,%20309%20College%20St%20#10&key=some_key请注意,当它应按照文档进行编码时,它仍在地址参数中。#%23深入调试器,似乎()后面的字符串被当作URL的片段。因此,为什么永远不会被编码。#10&key=some_key#是否有人能够使用 AsyncRestTemplate 在您的查询参数中提交符号?#我唯一能想到的是 替换为 ,这实际上有效,但感觉很笨拙/不理想。#number感谢您的帮助。
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

请注意,这是一个模板,编码的参数在其中进行插值。因此,您无法将实际参数作为 URL 的一部分提供。您需要将字符串更改为如下所示的模板googleUrl

final String googleUrl = "https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={key}";

这将返回正确的编码:

https://maps.googleapis.com/maps/api/geocode/json?address=05406,%20VT,%20BURLINGTON,%20309%20College%20St%20%2310&key=some_key



查看完整回答
反对 回复 2022-09-07
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信