retrofit2封装

1. retrofit2客户端封装

public class RetrofitClient {

    private String baseUrl;

    private long readTimeout = 10000;
    private long connectTimeout = 10000;

    public RetrofitClient(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    public void setReadTimeout(long readTimeout) {
        this.readTimeout = readTimeout;
    }

    public void setConnectTimeout(long connectTimeout) {
        this.connectTimeout = connectTimeout;
    }

    public Retrofit get(Interceptor... interceptors) {
        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .readTimeout(readTimeout, TimeUnit.MILLISECONDS)
                .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS);
        for (Interceptor interceptor : interceptors) {
            builder.addInterceptor(interceptor);
        }
        OkHttpClient okHttpClient = builder
                .build();
        return new Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(okHttpClient)
                .addConverterFactory(convertFactory())
                .build();
    }

    private Converter.Factory convertFactory() {
        return new Converter.Factory() {
            @Override
            public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
                return new Converter<ResponseBody, Object>() {
                    @EverythingIsNonNull
                    @Override
                    public Object convert(ResponseBody value) throws IOException {
                        BufferedSource bufferedSource = Okio.buffer(value.source());
                        String tempStr = bufferedSource.readUtf8();
                        bufferedSource.close();
                        return JSON.parseObject(tempStr, type);
                    }
                };
            }

            @Override
            public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
                return new Converter<Object, RequestBody>() {
                    private final MediaType mediaType = MediaType.parse("application/json; charset=UTF-8");

                    @EverythingIsNonNull
                    @Override
                    public RequestBody convert(Object value) {
                        return RequestBody.create(mediaType, JSON.toJSONBytes(value));
                    }
                };
            }
        };
    }

 2. retrofit2接口使用

public interface PaymentApi {

    @Headers({"Content-Type: application/json"})
    @POST("/pay")
    Call<JSONObject> pay(@Body RequestDto request);


    @Headers({"Content-Type: application/json"})
    @GET("/payments/{id}")
    Call<JSONObject> getDetails(@Url String id);
}

  

 3.客户端调用

 public JSONObject pay(CheckoutPaymentRequestDto request) {
       
        PaymentApi paymentApi = new RetrofitClient(Constants.CHECKOUT_BASEURL).get(chain -> {
            Request req = chain.request()
                    .newBuilder()
                    .header(Constants.ECRET_HEADER, Constants.SECRET).build();
            return chain.proceed(req);
        }).create(PaymentApi.class);
        logger.info("checkout 请求开始,参数{}", JSON.toJSONString(request));
        Call<JSONObject> call = paymentApi.pay(request);
       //获取返回数据业务处理逻辑
        return null;
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值