繁体   English   中英

杰克逊解串器不会因未知属性或值丢失而失败

[英]Jackson deserializer not failing on unknown properties or missing values

当我尝试从String反序列化Object并且此String不包含某些字段或者包含不在我的Object中的字段时,Jackson序列化程序完全可以使用它并且只使用null / Optional.empty()字段创建我的Object ,也忽略了未知的属性。 我尝试使用功能FAIL_ON_UNKNOWN_PROPERTIES设置阅读器,但没有成功。 我有一个非常简单的Jackson配置,除了添加了对Java 8和java.time的支持之外,其他配置不多。

编辑:

public final ObjectReader reader;
public final ObjectWriter writer;

private JsonMapperTestInstance() {
    ObjectMapper mapper = new JacksonConfiguration().objectMapper();
    reader = mapper.reader();
    writer = mapper.writer().withFeatures(SerializationFeature.INDENT_OUTPUT);
}
public <T> T deserialize(Class<T> actual, String serialized) throws IOException {
    return reader.forType(actual).readValue(serialized);
}

JacksonConfiguration:

@Primary
@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    registerModules(mapper);
    mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
    return mapper;
}
@Bean
public JavaTimeModule javaTimeModule() {
    return new JavaTimeModule();
}
@Bean
public Jdk8Module jdk8Module() {
    return new Jdk8Module().configureAbsentsAsNulls(true);
}
private void registerModules(ObjectMapper mapper) {
    mapper.registerModule(jdk8Module());
    mapper.registerModule(javaTimeModule());
}
@Primary
@Bean
public ObjectWriter writer(ObjectMapper mapper) {
    return mapper.writer();
}
@Primary
@Bean
public ObjectReader reader(ObjectMapper mapper) {
    return mapper.reader();
}

我已经确定注释@JasonUnwrapped导致了这种行为。 没有它,杰克逊就会对财产“ very_wrong_field”产生期望,该财产以前是默默无视的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM