Chrome和RestTemplate之间的Google Maps API结果不同

时间:2018-07-20 16:52:52

标签: spring google-maps java-8 google-api resttemplate

该服务正在使用Google Maps API(geocode)。

当我使用默认的bean配置为spring resttemplate执行GET时,我的值不同于在Web浏览器(Chrome)上执行此GET时的值。

在Chrome上调用并使用resttemplate:

https://maps.googleapis.com/maps/api/geocode/json?key=mykeymykeymykeymykey&address=Rua%20Marques%20de%20Valenca,%20100,%20Alto%20da%20Mooca,%20S%C3%A3o%20Paulo%20-%20SP,%20Brasil&language=pt-BR

当我执行反向地址解析时,镶边执行更加精确。

结果: Chrome:

location: {
  lat: -23.5577251,
  lng: -46.5948733
},

RestTemplate:

location: {
  lat: -23.5574375,
  lng: -46.5948733
},

我尝试使用Double,Float和BigDecimal。我尝试创建一个反序列化器以在序列化之前获取此值,但是该值相同。

我正在将Java 8与Spring Boot 2.0.3一起使用。

有人知道如何准确吗?

1 个答案:

答案 0 :(得分:0)

我使用的是UriComponentsBuilder,当我使用toUriString时,该网址已设置为浏览器格式,并且无法正常工作。

UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(googleHost)
                .queryParam("key", apiKey)
                .queryParam(input, address)
                .queryParam("language", language);

现在可以使用StringUtils.join(...)构建URI。

String googleurl = StringUtils.join(googleGeocodingHost, 
        "?key=", apiKey, "&", input, "=", address, "&language=", language);