目录
一、注册账号
二、搜索小demo
1.首先要引入依赖
2. 然后查看打印结果即可
三、搜索接口代码
1.引入依赖
2.yml配置
2.Controller
3.静态工具类
四、运行测试
一、注册账号
高德开放平台 | 高德地图API
- 注册高德开发者;
- 去控制台创建应用;
- 获取Key;
具体教程可以看官方文档 创建应用和 Key-Web服务 API | 高德地图API,api文档也在链接里
二、搜索小demo
我这里用到的是关键字搜索,先写个小demo测试一下
1.首先要引入依赖
引入这个依赖主要是因为我们是通过
HttpClient
类来发送HTTP请求并获取响应的
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
</dependencies>
2. 然后查看打印结果即可
package cn.homed.aio.device.web;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class gaode {
public static void main(String[] args) throws UnsupportedEncodingException {
HttpClient client = HttpClients.createDefault();
String apiUrl = "https://restapi.amap.com/v5/place/text";
String apiKey = "这里填你申请的key";
String searchTest = "天安门广场";
HttpGet request = new HttpGet(apiUrl + "?key=" + apiKey + "&keywords=" + URLEncoder.encode(searchTest,"UTF-8"));
try {
HttpResponse response = client.execute(request);
String responseBody = EntityUtils.toString(response.getEntity());
System.out.println(responseBody);
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、搜索接口代码
1.引入依赖
使用Fastjson的
JSONObject
类来解析HTTP响应的JSON格式数据。这样做的好处是可以方便地将HTTP响应中的JSON数据转换为Java对象
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
2.yml配置
2.Controller
这里的入参keywords是关键字,region是搜索区划
package cn.homed.common.webchat;
import cn.homed.common.constant.CommonKey;
import cn.homed.common.entity.MsgBean;
import cn.homed.common.utils.StringUtil;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author hulongtao
*/
@Slf4j
@RestController
@Tag(name ="高德搜索", description = "高德搜索接口")
@RequestMapping("/api/amap/getAddressList")
public class AutonaviSearchController {
@Value("${AMAP.apiKey}")
private String apiKey;
@Value("${AMAP.apiUrl}")
private String apiUrl;
@Operation(summary = "地址搜索", description = "通用搜索")
@PostMapping(value = "")
public MsgBean getAddressList(
@RequestParam(value = "keywords") String keywords , @RequestParam(value = "region",required = false) String region
) {
if (StringUtil.isNotNullOrEmpty(keywords)) {
try {
JSONObject addressListByKeywords = AMAPSearchUtils.getAddressListByKeywords(keywords, region,apiKey,apiUrl);
if (CommonKey.CONSTANT_1.equals(addressListByKeywords.getString("status"))) {
return MsgBean.success(addressListByKeywords.getJSONArray("pois"),"搜索成功");
}
return MsgBean.failMsg("搜索异常");
}catch (Exception e){
log.error("搜索地址失败:{}",e.getMessage());
return MsgBean.fail(CommonKey.FAIL);
}
}
return MsgBean.success();
}
}
3.静态工具类
这里的city_limit返回限制
package cn.homed.common.webchat;
import cn.homed.common.constant.ResultCode;
import cn.homed.common.exception.BizException;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
@Slf4j
public class AMAPSearchUtils {
public static JSONObject getAddressListByKeywords(String keywords, String region,String apiKey,String apiUrl) {
try {
HttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet(apiUrl + "?key=" + apiKey + "&keywords=" + URLEncoder.encode(keywords,"UTF-8") + "&city_limit=true®ion=" + region);
HttpResponse response = client.execute(request);
String responseBody = EntityUtils.toString(response.getEntity());
return JSONObject.parseObject(responseBody);
} catch (UnsupportedEncodingException uee) {
log.error("UnsupportedEncodingException 地址搜索失败:{}", uee.getMessage());
throw new BizException(ResultCode.FAIL, uee.getMessage());
}catch (IOException io) {
log.error("IOException 地址搜索失败:{}", io.getMessage());
throw new BizException(ResultCode.FAIL, io.getMessage());
}
}
}
四、运行测试
可以看到,数据也是正常的