2013-12-23 8 views
2

иерархия кажется, что этот вариант использования не поддерживается:Джексон десериализатор с несколькими уровнями полиморфного типа

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value=B1.class, name="b1"), 
    @JsonSubTypes.Type(value=B2.class, name="b2") 
}) 
public abstract class A { 
    ... 
} 

public class B1 extends A { 
    ... 
} 

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "subtype") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value=C1.class, name="c1"), 
    @JsonSubTypes.Type(value=C2.class, name="c2") 
}) 
public abstract class B2 extends A { 
    ... 
} 

public class C1 extends B2 { 
    ... 
} 

public class C2 extends B2 { 
    ... 
} 

То, что я хочу, чтобы решить эту одну: { «типа»: «b1»; ...} к классу B1 и {"type": "b2"; «подтип»: «c1»; ...} в класс C1 и {"type": "b2"; «подтип»: «c2»; ...} к классу C2. Любые предложения?

+0

Что произойдет, если указать все подтипы в аннотации класса А? – Salil

+0

Хорошо, посмотрите на конкретные классы: B1, C1 и C2. B1 имеет свойство «type» равно «b1» и не имеет свойства «подтипа». в то время как C1 и C2 имеют одно и то же свойство типа и другое свойство «подтипа». как я могу достичь этого, указав все подтипы в аннотациях класса А? – user3129233

+0

Вам нужны оба типа и подтипа? type = c1 является достаточной информацией для демаршаллинга. – Salil

ответ

0

Для тех, кто нуждается в ответ, OP получил ответ here:

Это не поддерживается

Смежные вопросы