gpt4 book ai didi

java - 在 Jackson 中跳过错误的 JSON 数据

转载 作者:行者123 更新时间:2023-11-29 08:54:04 24 4
gpt4 key购买 nike

使用 Jackson 数据绑定(bind),跳过坏数据 block 的最巧妙方法是什么,而不拒绝整个解析

参加这些类(class)(我使用公共(public)字段只是为了使代码简短):

 public class ClassWhichCouldFailConstruction {
public ClassWhichCouldFailConstruction(String s) {
if(s.charAt(0) > 'L') {
throw new BadParameterException();
}
// else init code here.
}
}

public class User {
public String name;
public ClassWhichCouldFailConstruction failable;
}

public class AppInfo {
public List<User> users;
}

...以及解析它的代码:

 AppInfo appinfo = (List<User>) objectMapper.readValues(jsonStream, AppInfo.class);

...和这个 JSON:

 { "users": [ 
{ "name": "John", "failable": "Example" },
{ "name": "Jane", "failable": "No good" }
]
}

默认情况下 ClassWhichCouldFailConstruction("No good") 将抛出一个异常,该异常将冒泡到 objectMapper.readValues() 的调用者。

  • 如何让它返回一个 AppInfo 对象,其中包含一个 users 列表,该列表是一个项目长(有效项目)?
  • 我可以运行例程来处理(例如记录)跳过的条目吗?

我知道我可以使用自定义反序列化器实现此目的:

 public class User {
public String name;
@JsonDeserialize (using = MyCustomDeserializer.class)
public ClassWhichCouldFailConstruction failable;
}

...其中 MyCustomDeserializer 以增量模式使用内容。我正在寻找一个利用数据绑定(bind)的选项。考虑到 ClassWhichCouldFailConstruction 可能要复杂得多,因此编写自定义解析器会很费力。

最佳答案

使用Bean Validation API而不是从构造函数中抛出异常——JSON 解析和数据绑定(bind)(Jackson 所做的)方面可以与验证逻辑分开。这就是 Bean Validator 提供帮助的地方:您可以以声明方式定义规则和约束。

关于java - 在 Jackson 中跳过错误的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com