java Jackson如何在没有已知属性的情况下失败,这与反序列化功能不同。在未知属性上失败
我们使用Jackson XmlMapper和ObjectMapper将XML和JSON文件解析为Java中的对象模型
问题是,我们还使用它们来验证(通过捕捉xmlMapper.readValue(file, type)
返回IOExeception
),给定要解析的文件是否与模型匹配(只要所需的模型字段存在,我们就不关心未知属性——只要整个对象的所有属性都不会返回null)
因此,使用xmlMapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
对我们来说并不太有效,因为如果存在我们不想映射的未知属性(或不知道的属性,或它们并不总是出现),映射就会失败
然而,我们仍然希望映射失败,如果我们要映射到的对象变为null(例如:提供给映射的xml文件与正确的结构完全不同——例如:它以根元素开头,而我们要映射到的模型以元素开头,xml中的任何地方都没有“页面”)
模型的主类注释为:
@JacksonXmlRootElement(localName = "ResultsSession")
,我们需要的所有属性都被注释为@JacksonXmlProperty(localName = "someValue")
或(isAttribute = true)
这有意义吗? 有没有办法确保映射的对象包含根元素,而不强制执行失败或未知属性
# 1 楼答案
我找到了一个可行的解决方案。 正确的方法是通过Java Bean Validator,大致如下:
而被验证的对象会向一个键属性添加类似:
@NotNull(Message = "error message")
的内容,这将很好地工作参考:https://www.baeldung.com/javax-validation