Javaè·åé«å¾·APIè¡æ¿åºåæ°æ®åå°æ°æ®åºï¼ç»´æ¤å°ä¹¡éä¸çº§
æç« ç®å½
- Javaè·åé«å¾·APIè¡æ¿åºåæ°æ®åå°æ°æ®åºï¼ç»´æ¤å°ä¹¡éä¸çº§
-
- 1.ç³è¯·é«å¾·è¡æ¿åºåAPIç[key](https://lbs.amap.com/api/webservice/guide/api/district/)
- 2.pomæ件
- 3.ymlæ件
- 4.æ°æ®åºç»æ
- 5.è·åymlé
ç½®æ件é
置类
- 6.å®ä½ç±»
- 7.httpUtil
- 8.è·åè¡æ¿åºåä¿¡æ¯å·¥å
·ç±»
- 9.controller,éå½ã
- 10.[ç¹æç´æ¥ä¸è½½](https://download.csdn.net/download/weixin_43577131/13453341)æå¼å¥½çæ°æ®ã
1.ç³è¯·é«å¾·è¡æ¿åºåAPIçkey
2.pomæ件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hyd</groupId>
<artifactId>area</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>area</name>e
<description>è·åé«å¾·apiè¡æ¿åºå</description>
<properties>
<java.version>1.8</java.version>
<mybatis.plus.version>3.4.1</mybatis.plus.version>
<knife4j.version>1.9.6</knife4j.version>
<validation.version>2.0.1.Final</validation.version>
<fastjson.version>1.2.74</fastjson.version>
<hutool.version>5.4.7</hutool.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--swagger-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- é¿éJSON解æå¨ -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.ymlæ件
# æ°æ®åºé
ç½®
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/AREA?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
# è·åè¡æ¿åºåä¿¡æ¯
area:
url: https://restapi.amap.com/v3/config/district
key: ä½ ç³è¯·çkey
4.æ°æ®åºç»æ
CREATE TABLE `t_area` (
`ad_code` bigint(32) NOT NULL COMMENT '主é®(åºåç¼ç )\r\n',
`parent_code` varchar(32) DEFAULT NULL COMMENT 'ç¶çº§åºåç¼ç ',
`name_` varchar(64) DEFAULT NULL COMMENT 'è¡æ¿åä½å称',
`city_code` varchar(32) DEFAULT NULL COMMENT 'åå¸ç¼ç ',
`type_` varchar(32) DEFAULT NULL COMMENT 'è¡æ¿åä½ç±»å« ç å¸ åº/å¿ è¡é/乡é',
`center` varchar(64) DEFAULT NULL COMMENT 'ç»åº¦ï¼çº¬åº¦',
`create_time` datetime DEFAULT NULL COMMENT 'å建æ¶é´',
`update_time` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´',
PRIMARY KEY (`ad_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
5.è·åymlé
ç½®æ件é
置类
package com.hyd.area.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* <p>
* è·åymlé
ç½®æ件信æ¯
* </p>
*
* @ClassName AreaConfig
* @Date 2020/12/2 13:37
* @Author hzy
*/
@Data
@Component
@ConfigurationProperties(prefix = "area")
public class AreaConfig {
/**
* 请æ±å°å
*/
private String url;
/**
* APIkey
*/
private String key;
}
6.å®ä½ç±»
package com.hyd.area.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hyd.area.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.util.List;
/**
* <p>
* (t_area)å®ä½ç±»
* </p>
*
* @Classname Area
* @Date 2020-12-01 09:59:38
* @Author hzy
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Builder(toBuilder = true)
@TableName("t_area")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "(t_area)å®ä½ç±»", description = "(t_area)å®ä½ç±»")
public class Area extends BaseEntity<Long> {
private static final Long serialVersionUID = -14216400471825395L;
/**
* åºåç¼ç è¡é没æç¬æçadCodeï¼å继æ¿ç¶ç±»ï¼åºå¿ï¼çadCode
*/
@TableField(value = "ad_code")
@ApiModelProperty(value = "åºåç¼ç è¡é没æç¬æçadCodeï¼å继æ¿ç¶ç±»ï¼åºå¿ï¼çadCode", notes = "åºåç¼ç è¡é没æç¬æçadCodeï¼å继æ¿ç¶ç±»ï¼åºå¿ï¼çadCode")
private String adCode;
/**
* ç¶çº§id
*/
@TableField(value = "parent_code")
@ApiModelProperty(value = "ç¶çº§id", notes = "ç¶çº§id")
private String parentCode;
/**
* å称
*/
@TableField(value = "name_")
@ApiModelProperty(value = "å称", notes = "å称")
private String name;
/**
* åå¸ç¼ç
*/
@TableField(value = "city_code")
@ApiModelProperty(value = "åå¸ç¼ç ", notes = "åå¸ç¼ç ")
private String cityCode;
/**
* ç级 å½å®¶ ç å¸ åº/å¿
*/
@TableField(value = "type_")
@ApiModelProperty(value = "ç级 å½å®¶ ç å¸ åº/å¿", notes = "ç级 å½å®¶ ç å¸ åº/å¿")
private String level;
/**
* ç»åº¦ï¼çº¬åº¦
*/
@TableField(value = "center")
@ApiModelProperty(value = "ç»åº¦ï¼çº¬åº¦", notes = "ç»åº¦ï¼çº¬åº¦")
private String center;
/**
* åèç¹
*/
@TableField(exist = false)
private List<Area> districts;
}
7.httpUtil
package com.hyd.area.common;
import lombok.extern.slf4j.Slf4j;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.security.cert.X509Certificate;
/**
* <p>
* éç¨http请æ±
* </p>
*
* @ClassName HttpUtil
* @Date 2020/12/1 10:08
* @Author hzy
*/
@Slf4j
public class HttpUtil {
/**
* åæå® URL åéGETæ¹æ³ç请æ±
*
* @param url åé请æ±ç URL
* @param param 请æ±åæ°ï¼è¯·æ±åæ°åºè¯¥æ¯ name1=value1&name2=value2 çå½¢å¼ã
* @return æ代表è¿ç¨èµæºçååºç»æ
*/
public static String sendGet(String url, String param) {
return sendGet(url, param, Constants.UTF8);
}
/**
* åæå® URL åéGETæ¹æ³ç请æ±
*
* @param url åé请æ±ç URL
* @param param 请æ±åæ°ï¼è¯·æ±åæ°åºè¯¥æ¯ name1=value1&name2=value2 çå½¢å¼ã
* @param contentType ç¼ç ç±»å
* @return æ代表è¿ç¨èµæºçååºç»æ
*/
public static String sendGet(String url, String param, String contentType) {
StringBuilder result = new StringBuilder();
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
URLConnection connection = realUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.connect();
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (ConnectException e) {
log.error("è°ç¨HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
} catch (SocketTimeoutException e) {
log.error("è°ç¨HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
} catch (IOException e) {
log.error("è°ç¨HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
} catch (Exception e) {
log.error("è°ç¨HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception ex) {
log.error("è°ç¨in.close Exception, url=" + url + ",param=" + param, ex);
}
}
return result.toString();
}
}
8.è·åè¡æ¿åºåä¿¡æ¯å·¥å
·ç±»
package com.hyd.area.common;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hyd.area.config.AreaConfig;
import com.hyd.area.entity.Area;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* è·åè¡æ¿åºåå·¥å
·ç±»
* </p>
*
* @ClassName AreaUtils
* @Date 2020/11/30 15:55
* @Author hzy
*/
@Component
public class AreaUtils {
/**
* è·åé
置信æ¯
*/
@Resource
private AreaConfig areaConfig;
/**
* è·åè¡æ¿åºåæ¹æ³
*
* @param param è§åï¼åªæ¯æå个å
³é®è¯è¯æç´¢å
³é®è¯æ¯æï¼è¡æ¿åºå称ãcityCodeãadCode
* @param subDistrict è§åï¼è®¾ç½®æ¾ç¤ºä¸çº§è¡æ¿åºçº§æ°ï¼è¡æ¿åºçº§å«å
æ¬ï¼å½å®¶ãç/ç´è¾å¸ãå¸ãåº/å¿4个级å«ï¼
* <p>
* å¯éå¼ï¼0ã1ã2ã3
* <p>
* 0ï¼ä¸è¿åä¸çº§è¡æ¿åºï¼
* <p>
* 1ï¼è¿åä¸ä¸çº§è¡æ¿åºï¼
* <p>
* 2ï¼è¿åä¸ä¸¤çº§è¡æ¿åºï¼
* <p>
* 3ï¼è¿åä¸ä¸çº§è¡æ¿åºï¼
* @return list
*/
public List<Area> getInfo(String param, String subDistrict) {
String result = HttpUtil.sendGet(areaConfig.getUrl(), "keywords=" + param + "&subdistrict=" + subDistrict + "&key=" + areaConfig.getKey());
JSONObject jsonObject = JSON.parseObject(result);
String country = jsonObject.getString("districts");
return JSON.parseArray(country, Area.class);
}
}
9.controller,éå½ã
package com.hyd.area.controller;
import cn.hutool.core.util.StrUtil;
import com.hyd.area.common.AreaUtils;
import com.hyd.area.entity.Area;
import com.hyd.area.service.AreaService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* (t_area_ultimate)æå¡å®ç°å±
* </p>
*
* @ClassName AreaController
* @Date 2020-12-01 09:59:38
* @Author hzy
*/
@RestController
@RequestMapping("area")
@Api(value = "è·åè¡æ¿åºå", tags = "è·åè¡æ¿åºåæ°æ®")
@Slf4j
public class AreaController {
/**
* æå¡å¯¹è±¡
*/
@Resource
private AreaService areaService;
@Resource
private AreaUtils areaUtils;
/**
* æ è¯ç¬¦
*/
private static final String NONE = "[]";
private static final String STREET = "street";
private static final String PROVINCE = "province";
/**
* åªä¿åç级è¡æ¿åä½ä¸3级çæ°æ®
*/
@GetMapping(value = "/getActive")
@ApiOperation(value = "åªä¿åç级è¡æ¿åä½ä¸3级çæ°æ®", notes = "åªä¿åç级è¡æ¿åä½ä¸3级çæ°æ®")
public void getActive() {
// è·åå½å®¶èç¹æ°æ®
List<Area> countryList = areaUtils.getInfo("", "1");
countryList.forEach(country -> {
// è·åå½å®¶ä¸é¢çææç份
List<Area> provinceList = country.getDistricts();
// æåº
provinceList = provinceList.stream().sorted(Comparator.comparing(Area::getAdCode)).collect(Collectors.toList());
provinceList.forEach(province -> {
List<Area> cityList = areaUtils.getInfo(province.getAdCode(), "3");
recursion(cityList, province.getAdCode());
});
});
log.info("æ°æ®æåä¿åæå!");
}
/**
* éå½ä¿åæ°æ®
*
* @param parentList ç¶çº§è¡æ¿åä½æ°æ®
*/
public void recursion(List<Area> parentList, String parentCode) {
if (CollectionUtils.isEmpty(parentList)) {
return;
}
// 对è¡é,乡éadCodeç¹æ®å¤ç
for (int i = 0; i < parentList.size(); i++) {
Area area = parentList.get(i);
if (StrUtil.equals(NONE, area.getCityCode())) {
area.setCityCode("");
}
if (StrUtil.equals(STREET, area.getLevel())) {
Long streetId = Long.valueOf(area.getAdCode().concat(String.format("%02d", i + 1)));
area.setAdCode(String.valueOf(streetId));
}
}
parentList.forEach(child -> {
// 设置ç¶id
if (StrUtil.equals(PROVINCE, child.getLevel())) {
child.setParentCode(String.valueOf(0));
} else {
child.setParentCode(parentCode);
}
// ä¿åæ°æ®
if (areaService.save(child)) {
if (!CollectionUtils.isEmpty(child.getDistricts())) {
recursion(child.getDistricts(), child.getAdCode());
}
}
});
}
}
10.ç¹æç´æ¥ä¸è½½æå¼å¥½çæ°æ®ã