我目前正在使用Jackson的objectMapper来序列化JSON中的值并将它们放在POJO中。我需要验证这些值,因此我使用验证注释,如@ Regex,@ Max等。
所以现在发生的是我调用objectMapper方法来读取JSON
publicEnquiry = objectMapper.readValue(jsonNode, Enquiry.class);
然后我检索列表中的所有验证消息,然后将其返回给用户。
payload = publicEnquiry.getPayload();
Set<ConstraintViolation<Enquiry<payload>>> constraintViolations =
publicEnquiry.getConstraintViolations();
如果我发送一个太大的整数,一个错误的格式化字符串,或任何不会给序列化带来问题的东西,但是如果我发送一个以意外格式格式化的日期,或者只是格式错误,如“2010”,那么一切正常-02“而不是”2010-02-03“,然后我得到一个JsonMappingException。这当然是预期的,因为映射器无法理解格式错误的日期。
但是,我需要管理这些异常,并且能够在每次发生时添加验证消息,这种方式对用户来说似乎是透明的。我需要一条消息,例如“验证失败:预期的格式是yyyy-MM-dd”。我需要在正常情况下对POJO的其他属性执行正常验证。
不幸的是,杰克逊没有在objectMapper中提供一个方法来跳过异常生成器字段并返回那些麻烦的字段列表,或类似的东西。如果出现问题,它就会失败。
有人会有解决方案或至少有关于如何进行的建议吗?