Browse Source

更新文档

drake 4 years ago
parent
commit
886ee46bc6
3 changed files with 63 additions and 13 deletions
  1. 9 0
      docs/convert.md
  2. 53 12
      docs/parse-list.md
  3. 1 1
      mkdocs.yml

+ 9 - 0
docs/convert.md

@@ -1,3 +1,5 @@
+如果你想要网络请求直接返回对应的Bean或者说POJO类你就要创建自定义的转换器, 来使用JSON解析框架处理你的数据(当然你可能是使用的protocol等其他数据格式)
+
 在Net中转换器([Convert](https://github.com/liangjingkanji/Net/blob/master/kalle/src/main/java/com/yanzhenjie/kalle/simple/Converter.kt))负责数据解析的工作, 自定义转换器即实现Convert接口即可
 
 > 你的业务可能需要请求参数加密或者拼接一串特殊含义的参数, 或者响应信息需要解密. 请不要尝试封装Post或者Get等请求函数(这是蠢材做法), 自定义拦截器和转换器可以应对任何项目需求.
@@ -45,6 +47,13 @@
 
 - 请自己手动添加[Moshi](https://github.com/square/moshi)或者[Gson](https://github.com/google/gson)的依赖
 - Moshi属于Kotlin上解析Json我比较推荐的一个解析库, 支持Kotlin默认值(Gson不支持)
+- 推荐使用官方的序列化框架: `kotlinx.Serialization`
+
+| 转换器参数 | 描述 |
+|-|-|
+| code | 即后端定义的`成功码`字段名 |
+| message | 即后端定义的`错误消息`字段名 |
+| success | 即`成功码`的值等于指定时才算网络请求成功 |
 
 <br>
 

+ 53 - 12
docs/parse-list.md

@@ -1,28 +1,63 @@
-一般的JSON数据都是
+一般的解析过程是以下
+
+1) 后端返回的JSON数据
+
 ```json
 {
-    code:"200",
-    msg:"错误信息",
-    data: {
-        name: "value"
+    "code":200,
+    "msg":"错误信息",
+    "data": {
+        "name": "彭于晏"
     }
 }
 ```
 
-我们可以直接复制这个JSON来创建数据模型
+2) 创建数据模型
+
+```kotlin
+data class UserInfo (
+    var code:Int,
+    var msg:String,
+    var data:Info,
+) {
+   data class Info (var name:String)
+}
+```
+
+3) 发起网络请求
+
 ```kotlin
 scopeNetLife {
     val data = Get<UserInfo>("/list").await().data
 }
 ```
 
-但是这样每次都要`.data`才是你要的真实数据. 有些人就想省略直接不写code和msg, 希望直接返回data. 这样的确可以, 但是面临一个问题, 部分后端开发可能让data直接为JSON数组.
-由于Java的类型擦除机制, List的泛型在运行时将被擦除, 导致Gson或者FastJson等无法解析出正确的List模型
+这样每次都要`await().data`才是你要的`data`对象. 有些人就想省略直接不写code和msg, 希望直接返回data.
+
+这样的确可以, 但是面临一个问题, 部分后端开发可能让data直接为JSON数组.
+
+例如这种格式
+
+```json
+{
+    "code":200,
+    "msg":"错误信息",
+    "data": [
+        { "name": "彭于晏" },
+        { "name": "吴彦祖" },
+        { "name": "金城武" }
+    ]
+}
+```
+
+由于Java的类型擦除机制, List的泛型在运行时将被擦除, 导致Gson或者FastJson等无法解析出正确的List数据
+
+> 在Net的未来版本`3.0`中将支持直接返回List/Map/Pair等, 无需任何处理, 泛型是什么就返回什么
 
 所以这样的代码将报错
 ```kotlin
 scopeNetLife {
-    val data = Get<List<Data>>("/list").await().data
+    val data = Get<List<Info>>("/list").await().data
 }
 ```
 
@@ -45,11 +80,17 @@ inline fun <reified T> String.toJsonArray(): MutableList<T> {
 }
 ```
 
-### 2) 使用
+### 2) 创建数据类
 
 ```kotlin
-scope {
-    val listData = Post<String>("/list").await().toJsonArray<Data>()
+data class Info (var name:String)
+```
+
+### 3) 使用
+
+```kotlin
+scopeNetLife {
+    val listData = Post<String>("/list").await().toJsonArray<Info>()
     listData[0]
 }
 ```

+ 1 - 1
mkdocs.yml

@@ -54,7 +54,7 @@ nav:
   - 下载文件: download-file.md
   - 下载图片: download-image.md
   - 读取缓存: read-cache.md
-  - 解析JSON数组: parse-list.md
+  - 返回集合结果: parse-list.md
   - 嵌套作用域: nested-scope.md
   - 最快请求结果: fastest.md
   - 唯一请求: unique.md