Java Jackson JSON在将值添加到列表之前检查这些值

Java Jackson JSON在将值添加到列表之前检查这些值,java,json,parsing,jackson,Java,Json,Parsing,Jackson,代码段: ObjectMapper objectMapper = new ObjectMapper(); try { this.persons = objectMapper.readValue(new File(fileName), new TypeReference<List<Person>>() { }); }

代码段:

ObjectMapper objectMapper = new ObjectMapper();
            try {
                this.persons = objectMapper.readValue(new File(fileName),
                        new TypeReference<List<Person>>() {
                });
            } catch (IOException ex) {

            }

我想知道这是否可能,怎么可能?在创建对象并将其添加到列表之前检查值。例如,如果电子邮件地址或名称超过30个字符,或者名称与某些正则表达式等匹配,我不希望创建对象并将其添加到列表中。相反,我希望抛出一个IOException,其中包含一些错误的输入数据。我不允许创建更多的自定义类。

我相信您不能这样做,因为Jackson的工作是解析,而不是验证。 我的建议是:

public boolean checkJson(String jsonStr, Class<?> valueType) throws JsonParseException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    try {
        List<TypeHere> list = mapper.readValue(jsonStr, valueType);
        return list.stream().anyMatch(s -> s.length() < 30);
    } catch (JsonMappingException e) {
        return false;
    } 
}
您可以抛出异常,而不是返回布尔值


Obs:我还在努力学习英语。请随意编辑。

如果您使用的是DTO,您可以将规则设置为set方法。这是我的建议。Jackson用于JSON解析,而不是验证。如果我想检查添加到列表中的最后一个对象,然后在出现问题时停止解析,该怎么办?请参阅我的答案/建议。
public boolean checkJson(String jsonStr, Class<?> valueType) throws JsonParseException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    try {
        List<TypeHere> list = mapper.readValue(jsonStr, valueType);
        return list.stream().anyMatch(s -> s.length() < 30);
    } catch (JsonMappingException e) {
        return false;
    } 
}