将resquest负载解析为对象

eoxn13cs  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(204)

我是kotlin/java世界的新手。所以我需要一点帮助以一种简单的方式解析一个旧的时尚请求。
我的控制器在收到新的请求之前工作得很好。
我的控制器:

@PostMapping("/create")
@ResponseStatus(OK)
fun create(
    @RequestBody @NotEmpty request: PersonRequest,
) = service.create(mapper.toDto(request))

新建bodyrequest:

{
    "fields": [
        {
            "id": "name",
            "value": "blablabla"
        },
        {
            "id": "phone",
            "value": "+1 11111111"
        },
        {
            "id": "birthday",
            "value": "2000-01-01"
        }
    ]
}

我的班级:

class PersonRequest(

        var name: String?,

        @field: Pattern(regexp = "blabla") 
        var phone: String?,

        var birthday: LocalDate?
    )

有什么建议吗?谢谢!

ndasle7k

ndasle7k1#

你发布的请求正文与类不匹配 PersonRequest .
将请求主体结构更改为:

{
  "name": "blablabla",
  "phone": "+1 11111111",
  "birthday": "2000-01-01"
}

更新:
由于无法更新请求结构,您的另一个选择是通过创建两个类来更改类结构,如下所示:

class PersonRequest(var fields: List<Field>)

class Field(var id: String, var value:Any)

更新2:
最后一步,根据您的需求是可选的,您可以操纵 PersonRequest 现在初始化并使用普通setter/getter将其转换为任何其他类。
更新3:
转换 List<Field>PersonRequest ,你可以这样做:

val personRequest = PersonRequest()
fields.forEach {
  when(it.id) {
    "name" -> personRequest.name = it.value
    "phone" -> personRequest.phone = it.value
    "birthday" -> personRequest.birthday = it.value
  }
}

不是最整洁的代码,但是。。。

相关问题