Джексон FAIL_ON_UNKNOWN_PROPERTIES к ложному не работает - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь сделать экономную десериализацию для 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 не работает?

Связывает ли Джакасон не поддержку FAIL_ON_UNKNOWN_PROPERTIES для экономии?

1 Ответ

0 голосов
/ 13 февраля 2019

FAIL_ON_UNKNOWN_PROPERTIES - для имен свойств вашего объекта.READ_UNKNOWN_ENUM_VALUES_AS_NULL для значения свойства.

Так что, если бы у вас была строка JSON, которая выглядела так:

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

Вы бы использовали FAIL_ON_UNKNOWN_PROPERTIES, например, если ваш объект значенияне было getProperty2 / setProperty2, тогда как вы бы использовали READ_UNKNOWN_ENUM_VALUES_AS_NULL, если бы ENUM_TWO не существовало в вашем перечислении.

...