2016-11-25 1 views
1

Я могу попробовать простые случаи полиморфной десериализации в джексоне.Дессон полиморфная десериализация без поля

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, 
    property = "type", visible = true) 
@JsonSubTypes({ 
@Type(value = A.class, name = "a"), 
@Type(value = B.class, name = "b") 
}) 
Class Base { 
    private String type; 
... 
} 

Class A extends Base { 
... 
} 

Class B extends Base { 
... 
} 

Но я столкнулся с тем, что у меня нет контроля над входящим Json. JSON выглядит

{ "type" : a, "params" : { .. fields for type A .. } }

{ "type" : b, "params" : { .. fields for type B .. } }

Поле params может быть любого типа A или B. Оба A и B наследуют от Base, но столбец, который принимает решение type, находится за пределами поля params.

Как настроить джексон смотреть на поле за пределами класса, а затем решить, фактический тип

ответ

0

нашел ответ от Java: Jackson polymorphic JSON deserialization of an object with an interface property?

Мы должны положить аннотации на переменном быть десериализованным с внешнее имущество

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, 
    property = "type") 
@JsonSubTypes({ 
    @Type(value = A.class, name = "a"), 
    @Type(value = B.class, name = "b") 
})