调用第三方接口

<!--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&timestamp=%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);
                });
            }
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值