簡體   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