1,get及post请求共有类
package com.cn.anji.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
/**
* Created by lizhihao on 2019/5/29 16:32
*/
public class SendUtils {
public static final Logger logger = LoggerFactory.getLogger(SendUtils.class);
/**
* 向指定 URL 发送POST方法的请求
*
* @param url 发送请求的 URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
logger.info("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
/**
* GET请求数据
*
* @param get_url url地址
* @param content key=value形式
* @return 返回结果
* @throws Exception
*/
public static String sendGetData(String get_url, String content){
String result = "";
URL getUrl = null;
BufferedReader reader = null;
String lines = "";
HttpURLConnection connection = null;
try {
if (content != null && !content.equals(""))
get_url = get_url + "?" + content;
// get_url = get_url + "?" + URLEncoder.encode(content, "utf-8");
getUrl = new URL(get_url);
connection = (HttpURLConnection) getUrl.openConnection();
connection.connect();
// 取得输入流,并使用Reader读取
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码
while ((lines = reader.readLine()) != null) {
result = result + lines;
}
return result;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
connection.disconnect();
}
return null;
}
}
2,地图操作共有类
package com.cn.anji.utils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ListIterator;
/**
* Created by lizhihao on 2019/5/29 14:16
*/
public class MapUtil {
private static String key = "1c8bd2170af2ffa4e1cbe063673cd3e1";
//地理编码 API 服务地址 GET 通过地址获取经纬度等信息
private static String geoUrl = "https://restapi.amap.com/v3/geocode/geo";
//通过经纬度获取地址信息
private static String regeoUrl = "http://restapi.amap.com/v3/geocode/regeo";
//通过ip定位获取所在地理信息
private static String ipUrl = "https://restapi.amap.com/v3/ip";
public static final Logger logger = LoggerFactory.getLogger(MapUtil.class);
//步行规划路线 GET
private static String walkingUrl = "https://restapi.amap.com/v3/direction/walking";
/**
* 根据IP地址获取地理信息
*/
public static String getLocaltionByIp(String ipAddress){
String res = SendUtils.sendGetData(ipUrl, "ip=" + ipAddress+"&key="+key);
logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
String rectangle = jsonObject.getString("rectangle");
return rectangle;
}
/**
* 步行规划路线
* origin表示起始地经纬度坐标,逗号隔开,destination表示目的地经纬度坐标,逗号隔开
*/
public static String walkingLocation(String origin,String destination){
String res = SendUtils.sendGetData(walkingUrl, "origin=" + origin+"&destination="+destination+"&key="+key);
logger.info(res);
return res;
}
/**
* 根据输入的地址查询经纬度信息
*/
public static String getLocations(String address){
String res = SendUtils.sendGetData(geoUrl, "address=" + address+"&key="+key);
logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
Object geocodes = jsonObject.get("geocodes");
JSONArray jsonArray = JSONArray.fromObject(geocodes);
logger.info(jsonArray.toString());
ListIterator listIterator = jsonArray.listIterator();
StringBuffer sb = new StringBuffer();
while(listIterator.hasNext()){
Object next = listIterator.next();
JSONObject jsonObject1 = JSONObject.fromObject(next);
String location = jsonObject1.getString("location");
sb.append(location+" ");
}
return sb.toString();
}
/**
* 阿里云api 根据经纬度获取地址
* @param log
* @param lat
* @return
*/
public static String getAdd(String log, String lat) {
StringBuffer s = new StringBuffer();
s.append("key=").append(key).append("&location=").append(log).append(",").append(lat);
String res = SendUtils.sendPost(regeoUrl, s.toString());
logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
JSONObject jsonObject1 = JSONObject.fromObject(jsonObject.get("regeocode"));
String add = jsonObject1.get("formatted_address").toString();
return add;
}
public static void main(String[] args) {
String add = getAdd("116.480690", "39.989777");
logger.info("地址信息为:"+add);
String result = getLocations("方恒国际中心A座");
logger.info("经纬度信息为:"+result);
String localtionByIp = getLocaltionByIp("114.247.50.2");
logger.info("通过ip获取到的经纬度信息为:"+localtionByIp);
walkingLocation("116.481028,39.989643","116.434446,39.90816");
}
}
注:JSONObject的maven依赖:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
最后一行需要保留,有两个jdk版本的实现:json-lib-2.1-jdk13.jar和json-lib-2.1-jdk15.jar