use*_*010 5 java thrift jackson
我正在尝试为 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);
Run Code Online (Sandbox Code Playgroud)
valueClass 属于以下类型
public class MyThrift implements org.apache.thrift.TBase<MyThrift, MyThrift._Fields>, java.io.Serializable, Cloneable, Comparable<MyThrift> {
Run Code Online (Sandbox Code Playgroud)
我不断得到
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
Run Code Online (Sandbox Code Playgroud)
如果我使用 FAIL_ON_UNKNOWN_PROPERTIES
但是如果我使用READ_UNKNOWN_ENUM_VALUES_AS_NULL,我不会得到同样的错误,有人能指出我为什么使用FAIL_ON_UNKNOWN_PROPERTIES不起作用的方向吗?
jackason bind 不支持FAIL_ON_UNKNOWN_PROPERTIESthrift 吗?
FAIL_ON_UNKNOWN_PROPERTIES用于对象的属性名称。 READ_UNKNOWN_ENUM_VALUES_AS_NULL是为了财产价值。
因此,如果您有一个如下所示的 JSON 字符串:
{
"property1": "ENUM_ONE",
"property2": "ENUM_TWO"
}
Run Code Online (Sandbox Code Playgroud)
FAIL_ON_UNKNOWN_PROPERTIES例如,如果您的值对象没有getProperty2/ setProperty2,则可以使用,而READ_UNKNOWN_ENUM_VALUES_AS_NULL如果ENUM_TWO枚举中不存在则可以使用。