jackson – 必需的财产?

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

例如。

mapperObject.readValue( node, MyTargetClass.class ) 

我可以在MyTargetClass上设置任何注释来强制执行必需的属性吗? 例如,如果我有一个带有属性ABC,DEF和GHI的JSON对象,我的Json就是以下内容

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

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

jackson不包括validationfunction,这是设计的(即被认为是超出范围)。 但通常使用的是Bean Validation API实现。 关于这一点的好处是数据格式处理和validation逻辑之间的分离。 这就是DropWizard使用的框架; 这就是JAX-RS(如Jersey)为JAX-RS 2.0带来的方向。

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

编辑:我收到了一个没有评论的downvote。 我很想知道为什么,因为它确实是正确的。

可能谷歌的GSON库将更好地满足您的需求。 但它有相反的要求:你应该严格定义所有结构。