Fixiaobai
2023-09-05 c9da1b0da1178911e383ddcaebecd1e088fa6004
framework/src/main/java/com/yuanchu/limslaboratory/utils/HttpUtils.java
@@ -1,136 +0,0 @@
package com.yuanchu.limslaboratory.utils;
import com.google.gson.Gson;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
 * @Author 张宾
 * @Date 2023/8/26
 */
@Component
public class HttpUtils {
    private final String IP="http://localhost:";
    @Value("${server.port}")
    private String port;
    public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
    public static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);
    final OkHttpClient client
            = new OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)
            .readTimeout(20, TimeUnit.SECONDS)
            .build();
    public String postJson(String url, Map<String, String> map,String token){
        url=IP+port+url;
        if (map == null || StringUtils.isEmpty(url)) {
            throw new RuntimeException("url或请求参数不能为空");
        }
        Gson gson = new Gson();
        String json = gson.toJson(map);
        RequestBody body = RequestBody.create(JSON, json);
        Request request = builderRequest(url, body, token);
        try (Response response = client.newCall(request).execute()) {
            ResponseBody responseBody = response.body();
            if (Objects.isNull(responseBody)) {
                throw new RuntimeException("响应体为空");
            }
            return responseBody.string();
        } catch (Exception e) {
            logger.error(e.toString());
            return "";
        }
    }
    private Request builderRequest(String url,RequestBody body,String token) {
        if(StringUtils.isNotEmpty(token)){
            return new Request.Builder()
                    .url(url)
                    .post(body)
                    .addHeader("X-Token", token)
                    .build();
        }else {
            return new Request.Builder()
                    .url(url)
                    .post(body)
                    .build();
        }
    }
    /**
     * 需要使用序列化工具将对象序列化成字符串:如gson
     *
     * @param url
     * @param json
     * @return
     */
    public String postJson(String url, String json,String token) {
        url=IP+port+url;
        if (StringUtils.isEmpty(json) || StringUtils.isEmpty(url)) {
            throw new RuntimeException("url或请求参数不能为空");
        }
        RequestBody body = RequestBody.create(JSON, json);
        Request request = builderRequest(url, body, token);
        try (Response response = client.newCall(request).execute()) {
            ResponseBody responseBody = response.body();
            if (Objects.isNull(responseBody)) {
                throw new RuntimeException("响应体为空");
            }
            return responseBody.string();
        } catch (Exception e) {
            logger.error(e.toString());
            return "";
        }
    }
    /**
     * @param url
     * @param queryParamMap
     * @return
     */
    public String get(String url, Map<String, String> queryParamMap, String token){
        url=IP+port+url;
        if (StringUtils.isEmpty(url)) {
            throw new RuntimeException("url或请求参数不能为空");
        }
        System.out.println(url);
        HttpUrl.Builder builder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
        if (queryParamMap != null && queryParamMap.size() != 0) {
            queryParamMap.forEach(builder::addQueryParameter);
        }
        url = builder.build().toString();
        Request request=null;
        if(StringUtils.isNotEmpty(token)){
             request = new Request.Builder()
                    .url(url)
                    .addHeader("X-Token", token)
                    .build();
        }else {
             request = new Request.Builder()
                    .url(url)
                    .build();
        }
        try (Response response = client.newCall(request).execute()) {
            ResponseBody responseBody = response.body();
            if (Objects.isNull(responseBody)) {
                throw new RuntimeException("响应体为空");
            }
            return responseBody.string();
        } catch (Exception e) {
            logger.error(e.toString());
            return "";
        }
    }
}