【问题标题】:Jackson FAIL_ON_UNKNOWN_PROPERTIES to false not workingJackson FAIL_ON_UNKNOWN_PROPERTIES 为 false 不起作用
【发布时间】:2019-07-06 18:57:15
【问题描述】:

我正在尝试使 jackason 向后兼容的节俭反序列化

ObjectMapper mapper = getObjectMapper(false /* pretty */);
mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); // This works

// This doesn't work
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);


MapLikeType t = mapper.getTypeFactory().constructMapLikeType(LinkedHashMap.class, keyClass, valueClass);
return mapper.readValue(content, t);

valueClass 属于以下类型

public class MyThrift implements org.apache.thrift.TBase<MyThrift, MyThrift._Fields>, java.io.Serializable, Cloneable, Comparable<MyThrift> {

我一直在努力

com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of com.MyThrift$_Fields from String value 'MY_ID': value not one of declared Enum instance names

如果我使用FAIL_ON_UNKNOWN_PROPERTIES

但是如果我使用 READ_UNKNOWN_ENUM_VALUES_AS_NULL 不会出现同样的错误,有人可以指出为什么使用 FAIL_ON_UNKNOWN_PROPERTIES 不起作用吗?

jackason 绑定不支持FAIL_ON_UNKNOWN_PROPERTIES 用于节俭吗?

【问题讨论】:

  • 你能展示你的JSON有效载荷和MyThrift类吗?

标签: java jackson thrift


【解决方案1】:

FAIL_ON_UNKNOWN_PROPERTIES 用于对象的属性名称。 READ_UNKNOWN_ENUM_VALUES_AS_NULL 用于属性值。

如果你有一个如下所示的 JSON 字符串:

{
"property1": "ENUM_ONE",
"property2": "ENUM_TWO"
}

例如,如果您的值对象没有getProperty2/setProperty2,您将使用FAIL_ON_UNKNOWN_PROPERTIES,而如果您的枚举中不存在ENUM_TWO,您将使用READ_UNKNOWN_ENUM_VALUES_AS_NULL

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2016-09-21
    • 2013-09-20
    • 2017-01-02
    • 2016-07-10
    • 2016-11-18
    相关资源
    最近更新 更多