java - 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 请求并这样做:
创建一个 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 示例。
解决方案
我明白我的错误是什么......
在这个实现中,我需要在 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)
推荐阅读
- javafx - 表格视图复选框的 Javafx 单元测试
- c++ - 错误:在 Mac 上使用 g++ 编译时出现未知类型名称“constexpr”
- python - Pandas Cumsum 条件重置
- flutter - 颤动跟踪或检测控制/通知中心屏幕
- java - 检查firebase实时数据库中的数据不起作用
- jira-rest-api - 使用 Jira POST api (curl) 检索自定义字段值
- java - 如何在 Android Studio 中设置 Gradle Wrapper
- javascript - 使用复选框显示/隐藏标记传单
- docker - Docker 无法在 Windows 10 Enterprise VM 上启动
- java - 在理解递归函数调用方面需要帮助