杰克逊 - 必需的财产?

2022-09-02 00:42:06

我在对象映射器上使用 Jackson 的 readValue() 方法从 JSON 文件读取并将其转换为我的 java 对象。

例如。

mapperObject.readValue( node, MyTargetClass.class )

是否可以在 MyTargetClass 上设置任何注释来强制实施必需的属性?例如,如果我有一个具有属性 ABC、DEF 和 GHI 的 JSON 对象,而我的 Json 如下

{
  "ABC" : "somevalue"
  "DEF" : "someothervalue" 
}

我希望它以某种方式失败,并且只有在包含ABC,DEF和GHI的情况下才能在readValue上成功。


答案 1

您可以使用注释将属性标记为必需,如果属性丢失或为 null,它将在反序列化期间引发 JsonMappingException。@JsonProperty(required = true)

编辑:我收到了反对票,没有评论。我很想知道为什么,因为它做了完全正确的事情。


答案 2

Jackson 不包括验证功能,这是设计使然(即被视为超出范围)。但通常使用的是Bean Validation API实现。这样做的好处是数据格式处理和验证逻辑之间的解耦。这就是像DropWizard这样的框架使用的东西;这是 JAX-RS(如 Jersey)为 JAX-RS 2.0 制定的方向。