【问题标题】:Retrofit sending Pojo as form data改造将 Pojo 作为表单数据发送
【发布时间】:2020-04-15 20:28:12
【问题描述】:

是否有任何构建方法可以将 java/kotlin pojo 转换为 Form 数据对象。 例如,如果我有两个类

data class Student(
        var id: Int,
        var name: String,
        var age: Int
)

data class College
    (
        var id: Int,
        var address: String,
        var students: Array<Student>
)

这个对象的数组在 JSON 中会是这样的

[
  {
    "id": 1,
    "address": "12 Lincoln Street",
    "students": 
    [
      {
        "id": 1,
        "name": "Mike",
        "age": 17
      },
      {
        "id": 2,
        "name": "Ann",
        "age": 18
      },
      {
        "id": 2,
        "name": "Bob",
        "age": 20
      }
    ]
  },
  {
    "id": 2,
    "address": "544 Peninsula Street Brooklyn",
    "students": 
    [
      {
        "id": 4,
        "name": "Tom",
        "age": 17
      },
      {
        "id": 5,
        "name": "Liza",
        "age": 21
      },
      {
        "id": 6,
        "name": "Rachel",
        "age": 22
      }
    ]
  }
]

我能以某种方式自动将其转换为表单数据吗?

college[0][id] = 1
college[0][address] = "12 Lincoln Street"
college[0][students][0][id] = 1
college[0][students][0][name] = "Mike"
college[0][students][0][age] = 17
college[0][students][1][id] = 2
college[0][students][1][name] = "Ann"
college[0][students][1][age] = 18
college[0][students][2][id] = 3
college[0][students][2][name] = "Bob"
college[0][students][2][age] = 20
college[1][id] = 2
college[1][address] = "544 Peninsula Street Brooklyn"
college[1][students][0][id] = 4
college[1][students][0][name] = "Tom"
college[1][students][0][age] = 17
college[1][students][1][id] = 5
college[1][students][1][name] = "Liza"
college[1][students][1][age] = 21
college[1][students][2][id] = 3
college[1][students][2][name] = "Rachel"
college[1][students][2][age] = 22

也许有一些 java/kotlin 库可以将 Json 字符串转换为表单数据?

【问题讨论】:

  • 您是否尝试过 DTO 生成器或 JSON To Kotlin 类插件?
  • 您可以使用一些 JSON 库,例如 gson 来实现。

标签: java android json kotlin retrofit


【解决方案1】:

您可以创建 2 个模型(pojo 类):

data class Student(
    @Expose
    @SerializedName("id")
    var id: Int,
    @Expose
    @SerializedName("name")
    var name: String,
    @Expose
    @SerializedName("age")
    var age: Int
)

data class College(
    @Expose
    @SerializedName("id")
    var id: Int,
    @Expose
    @SerializedName("address")
    var address: String,
    @Expose
    @SerializedName("students")
    var students: List<Student>
)

然后像这样从 json 解析到对象:

gson.fromJson(jsonString, Student::class.java)
 // or 
gson.fromJson(jsonString, College::class.java

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 2016-09-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多