跳转至

标签

Net支持的标签功能, 其标签能够贯穿网络请求的生命周期
在拦截器(Interceptor)或者转换器(Convert)中都可以通过request.tag()获取到标签

标签使用

1) 设置标签

scopeNetLife {
    tv_fragment.text = Get<String>("api", tag = RESPONSE).await()
}

2) 拦截器中获取标签

class NetInterceptor : Interceptor {
    override fun intercept(chain: Chain): Response {

        val request = chain.request()

        if (request.tag() == RESPONSE) {
            // 可以打印响应体或者其他逻辑
        }
        return chain.proceed(request)
    }
}

3) 转换器中获取标签

class JsonConvert : DefaultConvert(code = "code", message = "msg", success = "200") {

    override fun <S, F> convert(succeed: Type,
                                failed: Type,
                                request: Request,
                                response: Response,
                                result: Result<S, F>) {
        super.convert(succeed, failed, request, response, result)

        if (request.tag() == RESPONSE) { // 判断标签
            // 执行你的逻辑
        }
    }

    override fun <S> String.parseBody(succeed: Type): S? {
        return Moshi.Builder().build().adapter<S>(succeed).fromJson(this)
    }
}

多标签

创建一个类继承TAG, 即可通过加减符号来添加多标签

上面例子使用的RESPONSE就是一个示例

/**
 * 响应体打印标签
 */
object RESPONSE : TAG()

/**
 * 请求参数打印标签
 */
object REQUEST : TAG()

1) 设置标签

scopeNetLife {
    tv_fragment.text = Get<String>("api", tag = RESPONSE + REQUEST).await()
}

2) 判断包含标签

class NetInterceptor : Interceptor {
    override fun intercept(chain: Chain): Response {
        val request = chain.request()

        val tag = request.tag() as TAG

        if (tag.contains(REQUEST)) {
            // 可以打印响应体或者其他逻辑
        }
        if (tag.contains(RESPONSE)) {
            // 可以打印请求体或者其他逻辑
        }
        return chain.proceed(request)
    }
}

RESPONSE 和 REQUEST 已经在Net框架中存在, 可以直接使用