我正在使用Jackson
的ObjecMapper
将JSON数据反序列化到某个Java模型中。
我尝试实现的是以这样的方式配置ObjecMapper
:如果我收到的JSON包含的键比预期的多,反序列化过程不会失败,但如果由于某种原因Java模型中的Map(JSON)键不同和/或缺失,我需要失败。
例如,这是Java类别:
@Getter
@Setter
@ToString
@NoArgsConstructor
public final class CustomMessage {
@JsonProperty("first")
private String first;
@JsonProperty("second")
private Integer second;
@JsonProperty("third")
private Integer third;
}
我可以接收的JSON数据必须包含first
、second
和third
...但也可以包含其他一些键,我将丢弃这些键。
这是我目前所掌握的情况:
new ObjectMapper().disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.registerModule(new JavaTimeModule())
但还是不起作用;如果由于DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
的原因,没有发送任何"必需的" JSON密钥,它也不会失败。
应用程序不使用Spring
或任何其他类似的框架。
1条答案
按热度按时间8fsztsew1#
Jackson有一个
DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES
,您可以启用它,这样如果缺少任何属性,它将在反序列化过程中失败并抛出JsonMappingException
。公共静态最终反序列化功能FAIL_ON_MISSING_CREATOR_PROPERTIES
此功能可确定如果一个或多个创建者属性(绑定到Creator方法(构造函数或静态工厂方法)的参数的属性)缺少要从内容绑定到的值。如果启用,此类缺少的值将导致引发JsonMappingException,并显示有关第一个值的信息(按索引)。如果禁用,并且属性未标记为必需,缺少的Creator属性由反序列化程序为参数类型提供的空值填充(通常为Object类型的空值,以及原语的默认值;但可通过定制的反串行化器重新定义)。
因此,您可以将
ObjectMapper
创建为如果只需要几个特定属性而不是所有属性,您可以在必填字段中将
@JsonProperty
的required
参数(ref)设置为true
。例如,如果只需要属性first
,