Я пытаюсь десериализовать строку типа JSON (извлечен этот бит, чтобы показать проблему)
{
"$type": "com.example.StringProperty",
"value": "hello world",
"name": "text",
"readOnly": false
}
в иерархию классов, которые выглядят как
public class Property
{
public String name;
public int type;
Property(String pName, int pType) { name = pName; type = pType; }
}
public class StringProperty extends Property
{
public String value;
StringProperty(String pName, String pValue) {
super(pName, String);
value = pValue;
}
}
с использованием следующих смешанных аннотаций
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="$type")
abstract public class PropertyMixin
{
@JsonProperty
public String name;
//@JsonIgnore
//public boolean readOnly;
@JsonProperty
public int type;
PropertyMixin(@JsonProperty("name") String pName, @JsonProperty("type") int pType)
{
}
}
abstract public class StringPropertyMixin
{
@JsonProperty
public String value;
//@JsonIgnore
//public boolean readOnly;
@JsonCreator
public StringPropertyMixin(@JsonProperty("name") String pName, @JsonProperty("value") String value)
{
}
}
С Джексоном 1.9.2 я получаю ошибку
Unrecognized field "readOnly" (Class com.example.StringProperty), not marked as ignorable
Я пытался использовать @JsonIgnore
, но это не помогло (проверьте расположение кода, который я закомментировал, чтобы увидеть, как я его пробовал). Я, вероятно, что-то упускаю, но я думаю, что другой взгляд должен взглянуть на это и помочь мне.
Вот как выглядит среда десериализации:
objectMapper.setVisibilityChecker(objectMapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
MixinRegistrations module = new MixinRegistrations();
objectMapper.registerModule(module);
и модуль mixin выглядит как
@Override
public void setupModule(SetupContext context)
{
context.setMixInAnnotations(Property.class, PropertyMixin.class);
context.setMixInAnnotations(StringProperty.class, StringPropertyMixin.class);
}
Я ценю всю помощь. Заранее спасибо.
PS: я не знаю, имеет ли это значение, но JSON генерируется библиотекой, написанной в .Net Framework v4.