[英]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.