<!--okhttp3依赖-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
package com.example.zeusparking.utils;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Map;
@Component
public class OkHttpUtil {
/**
* 日志管理
*/
private static final Logger logger = LoggerFactory.getLogger(OkHttpUtil.class);
private static OkHttpClient client = new OkHttpClient();
/**
* OkHttp post请求 (同步)
*
* @param mediaType 请求类型
* @param url 请求地址
* @param jsonData 请求数据字符串
* @return 响应结果
*/
public static String postForString(String mediaType, String url, String jsonData, Map<String, String> headers) {
RequestBody body = RequestBody.create(MediaType.parse(mediaType), jsonData);
Request.Builder builder = new Request.Builder().url(url).post(body);
if (headers != null && headers.size() > 0) {
headers.forEach(builder::addHeader);
}
return getResBodyForHttp(builder);
}
/**
* OkHttp put请求 (同步)
*
* @param mediaType 请求类型
* @param url 请求地址
* @param jsonData 请求数据字符串
* @return 响应结果
*/
public static String putForString(String mediaType, String url, String jsonData, Map<String, String> headers) {
RequestBody body = RequestBody.create(MediaType.parse(mediaType), jsonData);
Request.Builder builder = new Request.Builder().url(url).put(body);
if (headers != null && headers.size() > 0) {
headers.forEach(builder::addHeader);
}
return getResBodyForHttp(builder);
}
/**
* OkHttp get请求 (同步)
*
* @param url 地址
* @param tClass 返回泛型
* @param <T> 泛型
* @param headers 头部
* @return 返回结果
*/
public static <T> T getForObject(String url, Class<T> tClass, Map<String, String> headers) {
String res = getForString(url, headers);
if (res != null) {
return JsonUtil.toBean(res, tClass);
}
return null;
}
/**
* OkHttp get请求 (同步)
*
* @param url 地址
* @param headers 头部
* @return 返回字符串
*/
public static String getForString(String url, Map<String, String> headers) {
Request.Builder builder = new Request.Builder().url(url).get();
if (headers != null && headers.size() > 0) {
headers.forEach(builder::addHeader);
}
return getResBodyForHttp(builder);
}
/**
* OkHttp delete请求 (同步)
*
* @param url 地址
* @param headers 头部
* @return 返回字符串
*/
public static String deleteForString(String url, Map<String, String> headers) {
Request.Builder builder = new Request.Builder().url(url).delete();
if (headers != null && headers.size() > 0) {
headers.forEach(builder::addHeader);
}
return getResBodyForHttp(builder);
}
/**
* 获取相应body
*
* @param builder 请求
* @return body
*/
private static String getResBodyForHttp(Request.Builder builder) {
try (Response response = client.newCall(builder.build()).execute()) {
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
logger.error("OkHttpClient请求异常:{}", e);
return null;
}
}
/**
* Okhttp get请求(同步)
*
* @param url 地址
* @return 响应体
*/
public static ResponseBody getForBody(String url) {
try {
Request request = new Request.Builder().url(url).get().build();
Response response = client.newCall(request).execute();
return response.body();
} catch (Exception e) {
e.printStackTrace();
logger.error("OkHttpClient请求异常:{}", e);
return null;
}
}
}
package com.example.zeusparking.utils;
import com.alibaba.fastjson.JSON;
import com.example.zeusparking.common.ErrorMsg;
import com.example.zeusparking.response.QualityException;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class JsonUtil {
/**
* 日志管理
*/
private static Logger LOGGER = LoggerFactory.getLogger(JsonUtil.class);
/**
* JSON配置
*/
private static ObjectMapper OBJECT_MAPPER = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_EMPTY).configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
static {
OBJECT_MAPPER.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
OBJECT_MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
}
/**
* Json转对象
*
* @param resource Json字符串
* @param cls 实体
* @param <T> 泛型
* @return 对象
*/
public static <T> T toBean(String resource, Class<T> cls) {
try {
return OBJECT_MAPPER.readValue(resource, cls);
} catch (Exception e) {
LOGGER.error("解析JSON错误{}", e);
throw new QualityException(ErrorMsg.PMS_JSON_ERROR);
}
}
/**
* Json转List集合
*
* @param resource Json字符串
* @param <T> 集合泛型
* @return 集合
*/
public static <T> List<T> toBeanList(String resource) {
try {
return OBJECT_MAPPER.readValue(resource, new TypeReference<List<T>>() {
});
} catch (Exception e) {
LOGGER.error("解析JSON错误{}", e);
throw new QualityException(ErrorMsg.PMS_JSON_ERROR);
}
}
/**
* @param resource Json字符串
* @param tClass 实体
* @param <T> 集合中的泛型
* @return 集合
*/
public static <T> List<T> toBeanList(String resource, Class<T> tClass) {
try {
JavaType javaType = getCollectionType(List.class, tClass);
return (List<T>) OBJECT_MAPPER.readValue(resource, javaType);
} catch (Exception e) {
LOGGER.error("解析JSON错误{}", e);
throw new QualityException(ErrorMsg.PMS_JSON_ERROR);
}
}
/**
* 对象转Json
*
* @param resource 对象
* @return Json字符串
*/
public static String toJsonStr(Object resource) {
try {
return OBJECT_MAPPER.writeValueAsString(resource);
} catch (Exception e) {
LOGGER.error("解析JSON错误{}", e);
throw new QualityException(ErrorMsg.PMS_JSON_ERROR);
}
}
private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
return OBJECT_MAPPER.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
/**
* Json转Map
*
* @param json 对象
* @return Json字符串
*/
public static Map toMap(String json) {
try {
return JSON.parseObject(json, HashMap.class);
} catch (Exception e) {
LOGGER.error("解析JSON错误{}", e);
throw new QualityException(ErrorMsg.PMS_JSON_ERROR);
}
}
}
使用
@Test
public void contextLoads() {
Long millisecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
String url = "http://www.baidu.com";
Map<String, String> map = new HashMap<>(16);
map.put("id", "1");
map.put("name", millisecond.toString());
String string = OkHttpUtil.postForString(MediaType.APPLICATION_JSON_UTF8_VALUE, url, JsonUtil.toJsonStr(map), null);
System.err.println(string);
}
@Test
public void synchronization() {
String url = String.format("http://uface-ubi.com/v1/BFB20703731DB7DEF/auth?appKey=%s×tamp=%s&sign=%s", "F2AC79E9CB06AE680ED873", "15910000", CcbEncryptionOnlineUtil.md5Str("F2AC79E9CBB2496AE680ED873" + "15910000" + "C54E088828BC92F47452B8"));
String string = OkHttpUtil.postForString(MediaType.APPLICATION_FORM_URLENCODED_VALUE, url, "", null);
if (!ObjectUtils.isEmpty(string) && JsonUtil.toMap(string).get("result").equals(1) && !ObjectUtils.isEmpty(JsonUtil.toMap(string).get("data"))) {
String lotUrl = String.format("http://uface-ubi.com/v1/BFB227703731DB7DEF/devices/search?appId=%s&token=%s", "BFB207F6E31DB7DEF", JsonUtil.toMap(string).get("data"));
String result = OkHttpUtil.postForString(MediaType.APPLICATION_FORM_URLENCODED_VALUE, lotUrl, "", null);
if (!ObjectUtils.isEmpty(result) && JsonUtil.toMap(result).get("result").equals(1) && !ObjectUtils.isEmpty(JsonUtil.toMap(result).get("data"))) {
List<ParkingLotModel> parkingLotModels = JsonUtil.toBeanList(JsonUtil.toMap(JsonUtil.toMap(result).get("data").toString()).get("content").toString(),ParkingLotModel.class);
parkingLotModels.forEach(parkingLotModel -> {
ParkingLot parkingLot = new ParkingLot();
parkingLot.setId(parkingLotModel.getId());
parkingLot.setName(parkingLotModel.getName());
parkingLot.setStatus(parkingLotModel.getStatus());
parkingLot.setCreateTime(parkingLotModel.getCreateTime());
parkingLot.setAt8002Key(parkingLotModel.getDeviceKey());
parkingLotRepository.save(parkingLot);
});
}
}
}