使用杰克逊数据绑定,跳过一大块数据的最佳方法是什么,而不拒绝整个解析?
选择这些类(我使用公共字段只是为了保持代码简短):
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以增量模式使用内容。我正在寻找一个利用数据绑定的选项。考虑到ClassWhichCouldFailConstruction
可能更复杂,因此编写自定义解析器会很费力。
答案 0 :(得分:0)
使用Bean Validation API而不是从构造函数中抛出异常 - JSON解析和数据绑定(杰克逊所做的)方面可以与验证逻辑分开。这是Bean Validator帮助的地方:您可以声明性地定义规则和约束。