我正在使用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
添加回答
举报
0/150
提交
取消