首页 > 解决方案 > Lombok 使用 Rest Assured 发送复杂 JSON 反序列化 POJO

问题描述

这是我第一次使用带有 Rest Assured 和复杂 JSON 的 POJO 和 Lombok。

我决定使用这种方法,因为 JSON 包含许多字段..

示例 JSON

{"records":[{"key":"1563106","value":{"ACTION":"A"}}]}

“值”对象包含大约 50 个字段。

使用 POJO 我创建了 3 个类

public class TransactionFields{
private List<RecordsItem> records;}


public class RecordsItem {
private Object value;
private String key;}


public class Value{
private String ACTION;}

通过为每个人添加注释

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

然后我尝试使用 Rest Assured 发送一个 POST 请求并这样做:

  1. 创建一个 Value 对象并添加一个值(我将在这里重复更多字段)

      Value value = Value.builder()
              .ACTION("A")
              .build();
    
 RecordsItem records = RecordsItem.builder()
                  .key("1563106")
                  .value(value)
                  .build();

我发送一个 POST 请求

given()
            .contentType("application/vnd.kafka.json.v2+json")
            .body(records).
            when().post("V02")
            .then().log().all().statusCode(200);

结果,我得到了错误

"error_code": 422,
"message": "Unrecognized field: value"

这就是问题开始的地方。我无法弄清楚我做错了什么。和最重要的问题。我是否正确使用了构建模式?正确的对象是否传递给 POST()?

请帮我弄清楚。简单的 JSON 示例没有问题,但我没有找到包含对象数组的 JSON 示例。

标签: javajsonlombokrest-assured

解决方案


我明白我的错误是什么......

在这个实现中,我需要在 RecordsItem 类中将值对象的类型更改为 Value。

public class RecordsItem {
private Value value;
private String key;

并创建另一个 TransactionFields 类型的对象

TransactionFields transactionFields = TransactionFields.builder()
            .records(Arrays.asList(records))
            .build();

然后在 post 请求正文中使用 transactionFields 变量

.body(transactionFields)

推荐阅读