java - Jackson 反序列化器不会因未知属性或缺失值而失败

标签 java serialization jackson java-8

当我尝试从 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/

相关文章:

C++如何通过套接字发送结构?

java - JSP - Microsoft ODBC - Microsoft Access 驱动程序找不到文件 '(unknown)'

java - 如何在 Eclipse 中向 GUI 贡献插件添加图标?

mysql - 在MySQL文本类型字段中序列化长数组并增加文本类型的大小。

java - 当 jackson 为空列表时不要返回属性

Java "Jackson"JsonMappingException : Can not deserialize instance of float out of FIELD_NAME token

java - JPA/Jackson - 反序列化时排除字段并在序列化时包含它们

java - 从字符列表中创建字符串然后清除它的最有效方法

java - SecureClassLoader 的目的是什么?

android - android.graphics.Path 可以做成 Parcelable 吗?