申请key

登录高德,注册,增加利用,创立key

官网api:

https://lbs.amap.com/api/webs...

调用步骤:
第一步,申请”web服务 API”密钥(Key);
第二步,拼接HTTP申请URL,第一步申请的Key需作为必填参数一起发送;
第三步,接管HTTP申请返回的数据(JSON或XML格局),解析数据。
如无非凡申明,接口的输出参数和输入数据编码全副对立为UTF-8。

最次要的也是获取到key

相干代码
pom.xml

<!--httpclient-->        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId>            <version>4.4</version>        </dependency>    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>fastjson</artifactId>        <version>1.2.78</version>    </dependency><dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-lang3</artifactId>    <version>3.4</version></dependency>

举荐浏览:《Spring Boot+Vue全栈开发实战》,点此获取PDF文件完整版

application.properties

server.port=2080#The config for HttpClienthttp.maxTotal=300http.defaultMaxPerRoute=50http.connectTimeout=1000http.connectionRequestTimeout=500http.socketTimeout=5000http.staleConnectionCheckEnabled=truegaode.key = 申请的key

HttpClientConfig

package com.zjy.map.config;import lombok.Data;import org.apache.http.client.HttpClient;import org.apache.http.client.config.RequestConfig;import org.apache.http.conn.HttpClientConnectionManager;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.converter.StringHttpMessageConverter;import org.springframework.web.client.RestTemplate;import java.nio.charset.Charset;import java.util.List;@Data@Configuration@ConfigurationProperties(prefix = "http", ignoreUnknownFields = true)public class HttpClientConfig {private Integer maxTotal;// 最大连贯private Integer defaultMaxPerRoute;// 每个host的最大连贯private Integer connectTimeout;// 连贯超时工夫private Integer connectionRequestTimeout;// 申请超时工夫private Integer socketTimeout;// 响应超时工夫/** * HttpClient连接池 * @return */@Beanpublic HttpClientConnectionManager httpClientConnectionManager() {    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();    connectionManager.setMaxTotal(maxTotal);    connectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute);    return connectionManager;}/** * 注册RequestConfig * @return */@Beanpublic RequestConfig requestConfig() {    return RequestConfig.custom().setConnectTimeout(connectTimeout)            .setConnectionRequestTimeout(connectionRequestTimeout).setSocketTimeout(socketTimeout)            .build();}/** * 注册HttpClient * @param manager * @param config * @return */@Beanpublic HttpClient httpClient(HttpClientConnectionManager manager, RequestConfig config) {    return HttpClientBuilder.create().setConnectionManager(manager).setDefaultRequestConfig(config)            .build();}@Beanpublic ClientHttpRequestFactory requestFactory(HttpClient httpClient) {    return new HttpComponentsClientHttpRequestFactory(httpClient);}/** * 应用HttpClient来初始化一个RestTemplate * @param requestFactory * @return */@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory requestFactory) {    RestTemplate template = new RestTemplate(requestFactory);    List<HttpMessageConverter<?>> list = template.getMessageConverters();    for (HttpMessageConverter<?> mc : list) {        if (mc instanceof StringHttpMessageConverter) {            ((StringHttpMessageConverter) mc).setDefaultCharset(Charset.forName("UTF-8"));        }    }    return template;}

举荐浏览:《Spring Boot+Vue全栈开发实战》,点此获取PDF文件完整版

WeatherUtils

package com.zjy.map.utils;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.utils.URIBuilder;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import java.net.URI;import java.util.Map;@Componentpublic class WeatherUtils {/**日志对象*/private static final Logger logger = LoggerFactory.getLogger(WeatherUtils.class);@Value("${gaode.key}")private String KEY;public final String WEATHER_URL = "https://restapi.amap.com/v3/weather/weatherInfo?";/** * 发送get申请 * @return */public JSONObject getCurrent(Map<String, String> params){    JSONObject jsonObject = null;    CloseableHttpClient httpclient = HttpClients.createDefault();    // 创立URI对象,并且设置申请参数    try {        URI uri = getBuilderCurrent(WEATHER_URL, params);        // 创立http GET申请        HttpGet httpGet = new HttpGet(uri);        CloseableHttpResponse response = httpclient.execute(httpGet);        // 判断返回状态是否为200        jsonObject = getRouteCurrent(response);        httpclient.close();    } catch (Exception e) {        e.printStackTrace();    }    return jsonObject;}/** * 依据不同的门路布局获取间隔 * @param response * @return */private static JSONObject getRouteCurrent(CloseableHttpResponse response) throws Exception{    JSONObject live = null;    // 判断返回状态是否为200    if (response.getStatusLine().getStatusCode() == 200) {        String content = EntityUtils.toString(response.getEntity(), "UTF-8");        logger.info("调用高德地图接口返回的后果为:{}",content);        JSONObject jsonObject = (JSONObject) JSONObject.parse(content);        JSONArray lives = (JSONArray) jsonObject.get("lives");        live = (JSONObject) lives.get(0);        logger.info("返回的后果为:{}",JSONObject.toJSONString(live));    }    return live;}/** * 封装URI * @param url * @param params * @return * @throws Exception */private URI getBuilderCurrent(String url, Map<String, String> params) throws Exception{    // 城市编码,高德地图提供    String adcode = params.get("adcode");    URIBuilder uriBuilder = new URIBuilder(url);    // 公共参数    uriBuilder.setParameter("key", KEY);    uriBuilder.setParameter("city", adcode);    logger.info("申请的参数key为:{}, cityCode为:{}", KEY, adcode);    URI uri = uriBuilder.build();    return uri;}/** * 查问将来的 * 发送get申请 * @return */public JSONObject sendGetFuture(Map<String, String> params){    JSONObject jsonObject = null;    CloseableHttpClient httpclient = HttpClients.createDefault();    // 创立URI对象,并且设置申请参数    try {        URI uri = getBuilderFuture(WEATHER_URL, params);        // 创立http GET申请        HttpGet httpGet = new HttpGet(uri);        CloseableHttpResponse response = httpclient.execute(httpGet);        // 判断返回状态是否为200        jsonObject = getRouteFuture(response);        httpclient.close();    } catch (Exception e) {        e.printStackTrace();    }    return jsonObject;}/** * 封装URI * @param url * @param params * @return * @throws Exception */private URI getBuilderFuture(String url, Map<String, String> params) throws Exception{    // 城市编码,高德地图提供    String adcode = params.get("adcode");    URIBuilder uriBuilder = new URIBuilder(url);    // 公共参数    uriBuilder.setParameter("key", KEY);    uriBuilder.setParameter("city", adcode);    uriBuilder.setParameter("extensions", "all");    logger.info("申请的参数key为:{}, cityCode为:{}", KEY, adcode);    URI uri = uriBuilder.build();    return uri;}/** * 依据不同的门路布局获取间隔 * @param response * @return */private static JSONObject getRouteFuture(CloseableHttpResponse response) throws Exception{    JSONObject live = null;    // 判断返回状态是否为200    if (response.getStatusLine().getStatusCode() == 200) {        String content = EntityUtils.toString(response.getEntity(), "UTF-8");        logger.info("调用高德地图接口返回的后果为:{}",content);        JSONObject jsonObject = (JSONObject) JSONObject.parse(content);        JSONArray forecast = (JSONArray) jsonObject.get("forecasts");        live = (JSONObject) forecast.get(0);        logger.info("返回的后果为:{}",JSONObject.toJSONString(live));    }    return live;}

举荐浏览:《Spring Boot+Vue全栈开发实战》,点此获取PDF文件完整版

WeatherController

    • package com.zjy.map.controller;import com.alibaba.fastjson.JSONObject;import com.zjy.map.utils.WeatherUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;/** * 高德天气   */   @RestController   @RequestMapping("/weather")   public class WeatherController {   @Autowired   private WeatherUtils weatherUtils;   /**日志对象*/   private static final Logger logger = LoggerFactory.getLogger(WeatherController.class);   /**    * http://localhost:2080/weather/getCurrent?adcode=140200    * 获取以后的天气预报    * @param adcode    * @return      */      @GetMapping("/getCurrent")      public JSONObject getWeather(@RequestParam String adcode){      Map<String, String> params = new HashMap<>();      params.put("adcode", adcode);      logger.info("获取以后的天气预报,申请的参数为:{}", params);      JSONObject map = weatherUtils.getCurrent(params);      logger.info("获取以后的天气预报,返回的申请后果为:{}", map);      return map;      }   /**    * http://localhost:2080/weather/getFuture?adcode=140200    * 获取将来的天气预报    * @param adcode    * @return      */      @GetMapping("/getFuture")      public JSONObject getFuture(@RequestParam String adcode){      Map<String, String> params = new HashMap<>();      params.put("adcode", adcode);      logger.info("获取将来的天气预报,申请的参数为:{}", params);      JSONObject map = weatherUtils.sendGetFuture(params);      logger.info("获取将来的天气预报,返回的申请后果为:{}", map);      return map;      }
代码贴完了。开始测试启动服务**举荐浏览:**[《Spring Boot+Vue全栈开发实战》,点此获取PDF文件完整版](https://docs.qq.com/doc/DQ05qV0xDdGNoRU16)城市编号官网提供下载地址:https://lbs.amap.com/api/webservice/download![在这里插入图片形容](https://mic-blob-bucket.oss-cn-beijing.aliyuncs.com/12b932d20a0c4aa289853cabd8d72595.png)这里获取以后工夫的天气情况与将来天气情况返回数据不一样,所在写了2个办法,参数只有一个,城市编码.1.获取以后天气http://localhost:2080/weather/getCurrent?adcode=140200![在这里插入图片形容](https://mic-blob-bucket.oss-cn-beijing.aliyuncs.com/b2451c2b5d1d4d1aa898d87c80e89dfa.png)2.获取将来天气http://localhost:2080/weather/getFuture?adcode=140200![在这里插入图片形容](https://mic-blob-bucket.oss-cn-beijing.aliyuncs.com/2d747fcc7c224c48ac0951d1fe6ac1be.png)    {  "province": "山西",  "casts": [      {          "date": "2021-12-13",          "dayweather": "晴",          "daywind": "东北",          "week": "1",          "daypower": "4",          "daytemp": "2",          "nightwind": "东北",          "nighttemp": "-18",          "nightweather": "晴",          "nightpower": "4"      },      {          "date": "2021-12-14",          "dayweather": "晴",          "daywind": "西",          "week": "2",          "daypower": "≤3",          "daytemp": "2",          "nightwind": "西",          "nighttemp": "-13",          "nightweather": "晴",          "nightpower": "≤3"      },      {          "date": "2021-12-15",          "dayweather": "多云",          "daywind": "东北",          "week": "3",          "daypower": "4",          "daytemp": "5",          "nightwind": "东北",          "nighttemp": "-12",          "nightweather": "多云",          "nightpower": "4"      },      {          "date": "2021-12-16",          "dayweather": "多云",          "daywind": "东南",          "week": "4",          "daypower": "4",          "daytemp": "-1",          "nightwind": "东南",          "nighttemp": "-18",          "nightweather": "晴",          "nightpower": "4"      }  ],  "city": "大同市",  "adcode": "140200",  "reporttime": "2021-12-13 18:04:08"    }![在这里插入图片形容](https://mic-blob-bucket.oss-cn-beijing.aliyuncs.com/c8e1d6cf0a864677a8b58b808f4c76c7.png)测试OK!**举荐浏览:**[《Spring Boot+Vue全栈开发实战》,点此获取PDF文件完整版](https://docs.qq.com/doc/DQ05qV0xDdGNoRU16)