问题描述
在SpringBoot应用中,有时会遇到使用RestTemplate调用第三方服务的场景。例如:在进行地名数据采集时,为了拿到地名对应的经纬度位置,通常会有地理编码的步骤,此时就可能涉及到调用第三方接口服务实现此需求。
以调用天地图提供的地理编码服务接口为例,请求地址为:
http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市延庆区延庆镇莲花池村前街50夕阳红养老院"}&tk=您的密钥
但是,如果采用直接拼接字符串的方式,就会遇到RestTemplate抛出的异常信息:IllegalArgumentException: Not enough variables available to expand。
解决方案
根据经验,应始终使用 POST
请求来发送 JSON 数据。
虽然不推荐使用 GET,但一个可行的解决方案是定义一个包含 ds的 String
对象,并在 URL 中提供一个真正的 URI 变量。示例代码如下,
//构造请求地址
String ds = "{\"keyWord\":\"" + keyword + "\"}";
String url = String.format("%s?tk=%s&ds={ds}", geocoderUrl, key);
//发送请求
String result = restTemplate.getForObject(url, String.class, ds);
System.out.println(result);
重新测试可通过,