Net支持的`标签`功能, 其标签能够贯穿网络请求的生命周期
在拦截器(Interceptor)或者转换器(Convert)中都可以通过`request.tag()`获取到标签
## 标签使用
### 1) 设置标签
```kotlin hl_lines="2"
scopeNetLife {
tv_fragment.text = Get("api", tag = RESPONSE).await()
}
```
### 2) 拦截器中获取标签
```kotlin hl_lines="4"
class NetInterceptor : Interceptor {
override fun intercept(chain: Chain): Response {
val request = chain.request()
if (request.tag() == RESPONSE) {
// 可以打印响应体或者其他逻辑
}
return chain.proceed(request)
}
}
```
### 3) 转换器中获取标签
```kotlin hl_lines="10"
class JsonConvert : DefaultConvert(code = "code", message = "msg", success = "200") {
override fun convert(succeed: Type,
failed: Type,
request: Request,
response: Response,
result: Result) {
super.convert(succeed, failed, request, response, result)
if (request.tag() == RESPONSE) { // 判断标签
// 执行你的逻辑
}
}
override fun String.parseBody(succeed: Type): S? {
return Moshi.Builder().build().adapter(succeed).fromJson(this)
}
}
```
## 多标签
创建一个类继承TAG, 即可通过加减符号来添加多标签
上面例子使用的`RESPONSE`就是一个示例
```kotlin
/**
* 响应体打印标签
*/
object RESPONSE : TAG()
/**
* 请求参数打印标签
*/
object REQUEST : TAG()
```
1) 设置标签
```kotlin
scopeNetLife {
tv_fragment.text = Get("api", tag = RESPONSE + REQUEST).await()
}
```
2) 判断包含标签
```kotlin hl_lines="7 10"
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框架中存在, 可以直接使用