网络层架构设计与实战十框架重构之重构request和response对象

1、对request和response重新进行封装,目的是打造retrofit一样的网络框架。
对不需要的类加上注解deprecated


2、将类MoocResponse标记为过时



3、将MoocRequest标记为deprecated



4、将MoocApiProvider标记为过时



5、将WrapperResponse标记为deprecated



6、重新封装request和response



7、重新封装Response,是对整个上层重新进行了一次封装

package com.nice.http;

/**
 * 上层业务的response
 *
 * @author nate
 */

public class Response<T> {

    /**
     * 解析后的实体
     */
    private T mBody;
    /**
     * 原始响应头
     */
    private HttpResponse mResponse;

    public Response(T body, HttpResponse response) {
        this.mResponse = response;
        this.mBody = body;
    }

    /**
     * 请求是否成功
     *
     * @return true 是成功 false 不成功
     */
    public boolean isSuccess() {
        return mResponse.getStatus().isSuccess();
    }

    /**
     * 得到解析后的实体
     *
     * @return body
     */
    public T body() {
        return mBody;
    }

}


8、请求成功的回调

package com.nice;

import com.nice.http.Response;

/**
 * 请求接口回调
 *
 * @author nate
 */

public interface Callback<T> {

    /**
     * 请求成功
     *
     * @param response {@link Response 响应实体}
     */
    void onSuccess(Response<T> response);

    /**
     * 请求失败
     *
     * @param exception 请求错误信息
     */
    void onFailure(Throwable exception);
}


9、对请求进行封装,它也是面临了一个上层的请求。

请求主要包括请求的url、请求的方法、请求头、请求的二进制数组(请求参数)

为了更简单地创建请求对象,使用build方法进行创建


package com.nice.http;

import com.nice.utils.HttpUrl;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


/**
 * 上层的业务请求对象
 *
 * @author nate
 */

public class Request {
    /**
     * 请求的url
     */
    private String mUrl;
    /**
     * 请求的方式
     */
    private HttpMethod mMethod;
    /**
     * 请求头
     */
    private HttpHeader mHeader;
    /**
     * 请求的实体
     */
    private RequestBody mBody;

    /**
     * 请求重试次数
     */
    private int mRetryCount;

    public Request(Builder builder) {
        this.mUrl = builder.mUrl;
        this.mMethod = builder.mMethod;
        this.mHeader = builder.mHeader;
        this.mBody = builder.mRequestBody;
        this.mRetryCount=builder.mRetryCount;
    }

    public int getRetryCount() {
        return mRetryCount;
    }

    public RequestBody getBody() {
        return mBody;
    }

    public String getUrl() {
        return mUrl;
    }

    public HttpMethod getMethod() {
        return mMethod;
    }

    public HttpHeader getHeader() {
        return mHeader;
    }

    public static class Builder {
        private String mUrl;
        private HttpMethod mMethod;
        private HttpHeader mHeader;
        private Map<String, String> mFormParams = new HashMap<>();
        private Map<String, String> mQueryParams = new HashMap<>();
        private RequestBody mRequestBody;
        private int mRetryCount;

        public Builder url(String url) {
            this.mUrl = url;
            return this;
        }


        public Builder requestBody(RequestBody body) {
            this.mRequestBody = body;
            return this;
        }

        public Builder httpMethod(HttpMethod method) {
            this.mMethod = method;
            return this;
        }

        public Builder addFormParam(String key, String value) {
            mFormParams.put(key, value);
            return this;
        }

        public Builder addQueryParam(String key, String value) {
            mQueryParams.put(key, value);
            return this;
        }

        public Builder addHeader(HttpHeader httpHeader) {
            this.mHeader = httpHeader;
            return this;
        }

        public Builder retryCount(int count) {
            this.mRetryCount = count;
            return this;
        }

        public Request build() {
            try {
                if (mQueryParams.size() > 0) {
                    this.mUrl = HttpUrl.encodedQuery(mUrl, mQueryParams);
                }
                if (mFormParams.size() != 0) {
                    mRequestBody = new RequestBody.FormBody(HttpUrl.encodedForm(mFormParams), MediaType.APPLICATION_FORM_URLENCODED_VALUE);
                }
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("编码解析出错");
            }
            return new Request(this);
        }
    }

}


10、上面的代码主要是定义了一些接口,比如说callback和上层所用到的request和response对象。和之前不同的是对request和response进行了重新定义,这样更符合整个框架的调整


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值