OkHttpUtil JsonUtil 工具类

这个博客展示了如何使用Java的OkHttp库进行HTTP GET和POST请求,以及使用Jackson库进行JSON序列化和反序列化操作。HttpUtil类提供了一系列静态方法来执行HTTP请求并处理响应,包括获取JSON字符串和转换为指定类型的对象。JsonUtil类则提供了将对象转换为JSON字符串和从JSON字符串解析对象的方法。
摘要由CSDN通过智能技术生成

maven

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.14.1</version>
    </dependency>

    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>4.10.0</version>
    </dependency>

HttpUtil

public class HttpUtil {
    private final static OkHttpClient client = new OkHttpClient();

    /**
     * GET 请求
     * @param url
     * @param param
     * @param header
     * @param type_ref
     * @param <T>
     * @return 返回json
     */
    public static <T> T get_json (String url, Map<String,String> param, Map<String,String> header, TypeReference<T> type_ref){
        String json_str = get_str(url, param, header);
        if (null == json_str || json_str.length() == 0){
            return null;
        }
        return JsonUtil.parse_any(json_str, type_ref);
    }


    /**
     * GET 请求
     * @param url
     * @param param
     * @param header
     * @return 返回UTF-8字符串
     */
    public static String get_str(String url, Map<String,String> param, Map<String,String> header){
        byte[] bytes = get(url, param, header);
        return null == bytes ? null : new String(bytes, StandardCharsets.UTF_8);
    }

    /**
     * GET 请求
     * @param url
     * @param param
     * @param header
     * @return 返回byte[]
     */
    public static byte[] get(String url, Map<String,String> param,Map<String,String> header){
        try {
            HttpUrl http_url = HttpUrl.parse(url);
            Request.Builder builder = new Request.Builder();
            //param
            HttpUrl.Builder http_url_builder = new HttpUrl.Builder()
                    .scheme(http_url.scheme())//协议
                    .host(http_url.host())//主机地址
                    .addPathSegments(http_url.encodedPath());//路径
            if (null != param && !param.isEmpty()){//添加参数
                for (Map.Entry<String,String> entry : param.entrySet()) {
                    http_url_builder.addQueryParameter(entry.getKey(),entry.getValue());
                }
            }
            http_url = http_url_builder.build();
            //header
            if (null != header && !header.isEmpty()){//请求头
                for (Map.Entry<String,String> entry : header.entrySet()) {
                    builder.header(entry.getKey(),entry.getValue());
                }
            }
            builder.url(http_url);
            Request request = builder.build();
            Response response = client.newCall(request).execute();
            if (response.code() != 200){
                return null;
            }
            ResponseBody body = response.body();
            return body.bytes();
        }catch (Exception e){
            return null;
        }
    }

    public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");


    public static <T> T post_json (String url, Map<String,String> param, Map<String,String> header, TypeReference<T> type_ref){
        String json_str = post_str(url, param, header);
        if (null == json_str || json_str.length() == 0){
            return null;
        }
        return JsonUtil.parse_any(json_str, type_ref);
    }


    /**
     * post 请求
     * @param url
     * @param param
     * @param header
     * @return
     */
    public static String post_str(String url, Map<String,String> param,Map<String,String> header){
        byte[] bytes = post(url, param, header);
        return null == bytes ? null : new String(bytes, StandardCharsets.UTF_8);
    }
    /***
     * post 请求
     * @param url
     * @param param
     * @param header
     * @return 返回byte数组
     */
    public static byte[] post(String url, Map<String,String> param,Map<String,String> header){
        try {
            String json_str = null == param || param.isEmpty() ? "{}" : JsonUtil.to_json_str(param);
            RequestBody body = RequestBody.create(json_str.getBytes(StandardCharsets.UTF_8));
            Request.Builder builder = new Request.Builder()
                    .url(url)
                    .post(body);
            //header
            if (null != header && !header.isEmpty()){//请求头
                for (Map.Entry<String,String> entry : header.entrySet()) {
                    builder.header(entry.getKey(),entry.getValue());
                }
            }
            Request request = builder.build();
            Response response = client.newCall(request).execute();
            if (response.code() != 200){
                System.err.println(response.body().string());
                return null;
            }
            return response.body().bytes();
        }catch (Exception e){
            return null;
        }
    }
}

JsonUtil

public class JsonUtil {

    private static ObjectMapper mapper = null;
    private static ObjectMapper get_mapper(){
        if (null == mapper){
            mapper = new ObjectMapper();
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        }
        return mapper;
    }

    public static String to_json_str(Object obj) {
        if (null == obj){
            return null;
        }
        ObjectMapper obj_mapper = JsonUtil.get_mapper();
        try {
            return obj_mapper.writeValueAsString(obj);
        }catch (Exception e){
            return null;
        }
    }

    /**
     * JSON字符串转数组对象
     * @param clazz 数组元素类型
     * @param text JSON字符串
     * @param <T> 数组元素类型
     * @return
     * @throws JsonProcessingException
     */
    public static <T> List<T> parse_list(Class<T> clazz, String text) {
        ObjectMapper obj_mapper = JsonUtil.get_mapper();
        CollectionType listType = obj_mapper.getTypeFactory().constructCollectionType(ArrayList.class, clazz);
        try {
            return JsonUtil.get_mapper().readValue(text, listType);
        }catch (Exception e){
            return null;
        }
    }

    private static final TypeReference<Map<String, Object>> type_ref = new TypeReference<Map<String, Object>>() {
    };
    /**
     * JSON字符串转 Map<String,Object>
     * @param text
     * @return
     * @throws JsonProcessingException
     */
    public static Map<String,Object> parse_obj(String text) {
        try {
            return JsonUtil.get_mapper().readValue(text, type_ref);
        }catch (Exception e){
            return null;
        }
    }


    /**
     * 自定义类型
     * @param text
     * @param type_ref
     * @param <T>
     * @return
     */
    public static <T> T parse_any(String text, TypeReference<T> type_ref) {
        try {
            return JsonUtil.get_mapper().readValue(text, type_ref);
        }catch (Exception e){
            return null;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值