封装HTTP请求

基于okhttp3封装。

一、定义接口返回对象

public class ResponseObj {
int httpCode;
String result;
Headers header;

public int getHttpCode() {
    return httpCode;
}

public void setHttpCode(int httpCode) {
    this.httpCode = httpCode;
}

public String getResult() {
    return result;
}

public void setResult(String result) {
    this.result = result;
}

public Headers getHeader() {
    return header;
}

public void setHeader(Headers header) {
    this.header = header;
}

}

二、定义接口HttpClientService

public interface HttpClientService {

/**
 * 同步http请求
 *
 * @param request request
 * @return response
 */
public Response executeRequestSync(Request request);

/**
 * 异步http请求(未测试,慎用)
 *
 * @param request  request
 * @param callback 回调
 */
public void executeRequestAsync(Request request, Callback callback);

}

三、接口实现

public class HttpClientServiceImpl implements HttpClientService {

private static final Integer CLIENT_TIMEOUT_SECONDS_DEFAULT=30;

private static OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(CLIENT_TIMEOUT_SECONDS_DEFAULT, TimeUnit.SECONDS)
        .readTimeout(CLIENT_TIMEOUT_SECONDS_DEFAULT, TimeUnit.SECONDS)
        .hostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String s, SSLSession sslSession) {
                return true;
            }
        })
        .build();

public static HttpClientServiceImpl httpClientService = new HttpClientServiceImpl();

// singleTon class 单例
public static HttpClientServiceImpl getHttpClientService(){
    if (httpClientService == null){
        httpClientService = new HttpClientServiceImpl();
    }
    return httpClientService;
}

@Override
public Response executeRequestSync(Request request) {
    try {
        return client.newCall(request).execute();
    } catch (IOException e) {
        return new Response.Builder()
                .request(request)
                .protocol(Protocol.HTTP_1_1)
                .code(404)
                .message(e.getMessage())
                .build();
    }
}

@Override
public void executeRequestAsync(Request request, Callback callback) {
    client.newCall(request).enqueue(callback);
}

}

四、请求方法封装

public class HttpUtil {

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



/***
 * json
 * string  requestBody
 */
public static ResponseObj getResponse(String url, String method, Map<String, String> headers, String requestBody){
    HttpClientService httpClientService = getHttpClientService();

    Request request = getRequestWithStringBody(url, method, headers, requestBody);
    Response response = httpClientService.executeRequestSync(request);

    return buildResponse(response);
}

/***
 * json
 * Map      requestBody
 */
public static ResponseObj getResponse(String url, String method, Map<String, String> headers, Map<String, String> requestBody){
    HttpClientService httpClientService = getHttpClientService();

    Request request = getRequestWithMapBody(url, method, headers, requestBody);
    Response response = httpClientService.executeRequestSync(request);

    return buildResponse(response);
}

/***
 * FormData
 * Map      FormData
 */
public static ResponseObj getResponseWithFormData(String url, String method, Map<String, String> headers, Map<String, String> formData){

    HttpClientService httpClientService = getHttpClientService();

    Request request = getRequestWithFormData(url, method, headers, formData);
    Response response = httpClientService.executeRequestSync(request);

    return buildResponse(response);
}

/***
 * FormData
 * post
 * header = null
 * Map      FormData
 */
public static ResponseObj getResponseWithFormData(String url, Map<String, String> formData){

    HttpClientService httpClientService = getHttpClientService();

    Request request = getRequestWithFormData(url, "POST", null, formData);
    Response response = httpClientService.executeRequestSync(request);

    return buildResponse(response);
}

/**
 * json
 * post
 * header = null
 *Map  requestBody
 */
public static ResponseObj postRequest(String url, Map<String, String> requestBody){
    HttpClientService httpClientService = getHttpClientService();

    Request request = getRequestWithMapBody(url, "POST", null, requestBody);
    Response response = httpClientService.executeRequestSync(request);

    return buildResponse(response);
}



//-------------  内部方法

/*
 *   支持 form-data 类型的body
 * */
private static Request getRequestWithFormData(String url,
                                              String method,
                                              Map<String, String> requestHeader,
                                              Map<String, String> body){

    Request.Builder builder = new Request.Builder();
    builder.url(url);
    if (requestHeader != null){
        for(String key:requestHeader.keySet()){
            builder.addHeader(key, requestHeader.get(key));
        }
    }

    FormBody.Builder bodyBuilder = new FormBody.Builder(Charset.forName("UTF-8"));
    for (Map.Entry<String, String> entry : body.entrySet()) {
        bodyBuilder.addEncoded(entry.getKey(), entry.getValue().toString());
    }
    FormBody formBodybody = bodyBuilder.build();

    if (method.equalsIgnoreCase("GET")){
        builder.get();
    }
    if (method.equalsIgnoreCase("POST")){
        builder.post(formBodybody);
    }

    return builder.build();
}

/*
 *   支持 Map 类型的body 直接传入, 并转换成json String类型
 * */

private static Request getRequestWithMapBody(String url, String method,
                                  Map<String, String> requestHeader,
                                  Map<String, String> body){
    JSONObject jsonObject = new JSONObject();
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    if (requestHeader != null){
        for(String key:requestHeader.keySet()){
            builder.addHeader(key, requestHeader.get(key));
        }
    }

    if (body != null){
        jsonObject.putAll(body);
    }

    RequestBody requestBody = RequestBody.create(JSON_TYPE, jsonObject.toString());
    if (method.equalsIgnoreCase("GET")){
        builder.get();
    }
    if (method.equalsIgnoreCase("POST")){
        builder.post(requestBody);
    }
    return builder.build();
}

private static ResponseObj buildResponse(Response response){

    ResponseObj responseObj = new ResponseObj();
    responseObj.setHttpCode(response.code());
    responseObj.setHeader(response.headers());
    try {
        responseObj.setResult(response.body().string());
    } catch (IOException e) {
        e.printStackTrace();
    }

    finally {
        if (response != null && response.body() != null){
            response.body().close();
            response.close();
        }
    }

    return responseObj;
}

/*
 *   支持String 类型body 直接传入
 * */
private static Request getRequestWithStringBody(String url, String method, Map<String, String> requestHeader, String body){
    Request.Builder builder = new Request.Builder();
    builder.addHeader("Content-Type", "application/json;charset=utf-8");
    builder.url(url);
    if (requestHeader != null){
        for(String key:requestHeader.keySet()){
            builder.addHeader(key, requestHeader.get(key));
        }
    }
    RequestBody requestBody = RequestBody.create(null, body);
    if (method.equalsIgnoreCase("GET")){
        builder.get();
    }
    if (method.equalsIgnoreCase("POST")){
        builder.post(requestBody);
    }
    return builder.build();
}

}

五、再次根据实际需要封装

public class MyHttpUtil {

/***
 *
 * get请求无参数
 */
public static ResponseObj sendGet(String url,  Map<String, String> header){


    return HttpUtil.getResponse(url, "GET", header, "");
}

/***
 *
 * get请求 需要参数
 */
public static ResponseObj sendGet(String url,  Map<String, String> header,Map<String,String> parm){

    if (parm.size()>0){

        String parms = "";
       Set<String> keys = parm.keySet();
       for( String key : keys){

           parms  = parms + key + "="+ parm.get(key)+"&";
       }
        url = url + "?"+ parms;
    }
    return HttpUtil.getResponse(url, "GET", header, "");
}


/***
 *
 * post请求  json-body
 */
public static ResponseObj sendPostWithJson(String url,  Map<String, String> header,String body){


    return HttpUtil.getResponse(url, "POST", header, body);
}


/***
 *
 * post请求  json-FormData
 */
public static ResponseObj sendPostWithFormData(String url,  Map<String, String> header ,Map<String, String> formData){

    return HttpUtil.getResponseWithFormData(url,"POST",header,formData);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值