OkHttpClient封装

 

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

import org.apache.commons.lang.StringUtils;

import com.alibaba.fastjson.JSONObject;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Request.Builder;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;

/**
 * OkHttpclient请求处理类
 * 2018年12月19日
 */
public class OkHttpClientUtil {
    
    //默认请求的文本参数类型
    private static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded";
    private static final String DEFAULT_CACHE_CTRL = "no-cache";
    
    /**
     * 发送请求
     * 2018年12月19日
     * @param url  必传,访问接口的url
     * @param contentType  非必传,默认为urlEncoded
     * @param parameters   必传,消息体类型
     * @param headers  必传,消息头格式设置
     * @return  成功响应后的内容字符串:异常结果为null
     * @throws Exception
     */
    public static JSONObject sendPost(String url,String contentType,Map<String,Object> parameters, Map<String,String> headers) throws Exception {
        if (StringUtils.isBlank(contentType)) {
            contentType = DEFAULT_CONTENT_TYPE;
        }
        
        //构建client,处理入参
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse(contentType);
        RequestBody body = RequestBody.create(mediaType, convertMap2Str(parameters));
        
        //设置消息头
        Builder builder = new Request.Builder().url(url).post(body);
        builder.addHeader("Content-Type", DEFAULT_CONTENT_TYPE);
        builder.addHeader("cache-control", DEFAULT_CACHE_CTRL);
        
        //如果headers不为空,重新设置消息头
        if (headers != null && !headers.isEmpty()) {
            for(Entry<String,String> entry : headers.entrySet()) {
                builder.addHeader(entry.getKey(), entry.getValue());
            }
        }
        
        //建立连接,发送请求
        Request request = builder.build();
        Response response = client.newCall(request).execute();
        
        //返回json格式数据,带成功失败码
        JSONObject result = new JSONObject();
        result.put("code", response.code());
        if (response.code() == 200) {
            ResponseBody rb = response.body();
            InputStream in = rb.byteStream();
            
            //从流中解析结构并返回
            BufferedReader streamReader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
            StringBuilder responseStrBuilder = new StringBuilder(); 
            String inputStr;  
            while ((inputStr = streamReader.readLine()) != null)  
                responseStrBuilder.append(inputStr);  
            result.put("result", responseStrBuilder.toString());
        }  else {
            result.put("message", response.message());
        }
        return result;
    }
    
    
    /**
     * 将map参数转换成string
     * 2018年12月19日
     * @param inMap
     * @return
     */
    public static String convertMap2Str(Map<String,Object> inMap) {
        if (!(inMap instanceof TreeMap)) {
            inMap = new TreeMap<>(inMap);
        }
        
        StringBuffer sb = new StringBuffer();
        for(Entry<String,Object> entry : inMap.entrySet()) {
            Object value = entry.getValue();
            sb.append(entry.getKey()).append("=").append(value).append("&");
        }
        
        if(sb.length() > 0) {
            sb.deleteCharAt(sb.length() - 1);
        }
        return sb.toString();
    }
    
}

转载于:https://my.oschina.net/u/2611678/blog/2990576

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值