Okhttp
1.首先需要导入OkHttp的maven相关坐标。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.1</version>
</dependency>
2.编写所需要的类,这个是枚举类,通过返回状态码可以看出,请求是否发送成功。
import com.alibaba.druid.wall.violation.ErrorCode;
/**
* 异常编码 0成功、-1熔断、 -2 标准参数校验不通过 -3会话超时
* 前两位:服务标识
* 中间两位:模块标识
* 后两位:异常标识
*/
public enum CommonErrorCode implements ErrorCode {
公用异常编码 //
SUCCESS(0, "成功"),
FUSE(-1, "网关调用熔断"),
/**
* 传入参数与接口不匹配
*/
E_100101(100101,"传入参数与接口不匹配"),
/**
* 验证码错误
*/
E_100102(100102,"验证码错误"),
/**
* 验证码为空
*/
E_100103(100103,"验证码为空"),
/**
* 查询结果为空
*/
E_100104(100104,"查询结果为空"),
/**
* ID格式不正确或超出Long存储范围
*/
E_100105(100105,"ID格式不正确或超出Long存储范围"),
E_100106(100106,"请求失败"),
E_999990(999990,"调用微服务-交易中心 被熔断"),
E_999991(999991,"调用微服务-授权服务 被熔断"),
E_999992(999992,"调用微服务-用户服务 被熔断"),
E_999993(999993,"调用微服务-资源服务 被熔断"),
E_999994(999994,"调用微服务-同步服务 被熔断"),
E_999995(999995,"调用微服务-统一账户服务 被熔断"),
E_999996(999996,"调用微服务-存管代理服务 被熔断"),
/**
* 调用微服务-还款服务 被熔断
*/
E_999997(999997,"调用微服务-还款服务 被熔断"),
CUSTOM(999998,"自定义异常"),
/**
* 未知错误
*/
UNKOWN(999999,"未知错误");
private int code;
private String desc;
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
private CommonErrorCode(int code, String desc) {
this.code = code;
this.desc = desc;
}
public static CommonErrorCode setErrorCode(int code) {
for (CommonErrorCode errorCode : CommonErrorCode.values()) {
if (errorCode.getCode()==code) {
return errorCode;
}
}
return null;
}
}
3.封装类,发送请求时,把数据封装成一个实体。通过get方法获取相应的数据。
import cn.hutool.json.JSONObject;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@JsonInclude(Include.NON_NULL)
@ApiModel(value = "RestResponse<T>", description = "响应通用参数包装")
public class RestResponse<T> {
@ApiModelProperty("响应错误编码,0为正常")
private int code;
@ApiModelProperty("响应错误信息")
private String msg;
@ApiModelProperty("响应内容")
private T result;
private JSONObject jsonObject;
public static <T> RestResponse<T> success() {
return new RestResponse<T>();
}
public static <T> RestResponse<T> success(T result) {
RestResponse<T> response = new RestResponse<T>();
response.setResult(result);
return response;
}
public static <T> RestResponse<T> validfail(String msg) {
RestResponse<T> response = new RestResponse<T>();
response.setCode(-2);
response.setMsg(msg);
return response;
}
public RestResponse() {
this(0, "");
}
public RestResponse(int code, String msg) {
this.code = code;
this.msg = msg;
}
public JSONObject getJsonObject() {
return jsonObject;
}
public void setJsonObject(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
@JsonIgnore
public Boolean isSuccessful() {
return this.code == 0;
}
@Override
public String toString() {
return "RestResponse{" +
"code=" + code +
", msg='" + msg + '\'' +
", result=" + result +
", jsonObject=" + jsonObject +
'}';
}
}
4.Okhttp工具类,这个工具类只支持post请求,无法封装json对象,如果需要请到本人的其他文章查看。
import me.zhengjie.mybatis.domain.CommonErrorCode;
import me.zhengjie.mybatis.domain.RestResponse;
import com.alibaba.fastjson.JSON;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* <P>
* okHttp3请求工具类
* </p>
*/
public class OkHttpUtil {
private static OkHttpClient okHttpClient = new OkHttpClient().newBuilder().retryOnConnectionFailure(true)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS).build();
private static final MediaType JSON_TYPE
= MediaType.parse("application/json; charset=utf-8");
/**
* 发送post请求
* @param url
* @param json
* @return
*/
public static RestResponse post(String url, String json) {
okhttp3.RequestBody body = okhttp3.RequestBody.create(JSON_TYPE, json);
Request request = new Request.Builder().url(url).post(body).build();
try (Response response = okHttpClient.newCall(request).execute()) {
okhttp3.ResponseBody responseBody = response.body();
if (responseBody != null) {
return JSON.parseObject(responseBody.string(), RestResponse.class);
}
} catch (IOException e) {
e.printStackTrace();
}
return RestResponse.validfail(CommonErrorCode.E_100106.getDesc());
}
}