当我尝试从 String 反序列化 Object 时,该 String 不包含某些字段或具有不在我的 Object 中的字段,Jackson 序列化程序对此完全没问题,只是使用 null/Optional.empty() 字段创建我的对象,同时忽略未知属性。我尝试使用功能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);
}
jackson 配置:
@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 导致了此行为。如果没有它, jackson 就会对属性“very_wrong_field”产生期望,而此前该属性被默默地忽略了。
关于java - Jackson 反序列化器不会因未知属性或缺失值而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313639/