Я пытаюсь сериализовать объект в json, используя jackson 2.6.3. Я хочу включить информацию о типе в сериализованный json. Это не работает для членов, вложенных в этот класс.
Вот тестовый код.
public class Test {
@JsonSubTypes({ @JsonSubTypes.Type(value = ConcreteA.class)})
interface A {
}
@JsonTypeInfo( use=JsonTypeInfo.Id.CLASS)
class ConcreteA implements A {
}
@JsonSubTypes({ @JsonSubTypes.Type(value = ConcreteB.class)})
interface B {
}
@JsonTypeInfo( use=JsonTypeInfo.Id.CLASS)
class ConcreteB implements B {
A a;
public A getA() {
return a=new ConcreteA();
}
}
@org.junit.Test
public void testSerialisation() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
System.out.println(objectMapper.writeValueAsString(new ConcreteB()));
}
}
JSON, преобразованный Джексоном,
{"@class":"Test$ConcreteB","a":{}}
Обратите внимание, что он не включает информацию о типе для поля «a». Информация о типе включается при сериализации только A.
{"@class":"Test$ConcreteA"}
ОБНОВЛЕНИЕ: Вот объяснение и решение от jackson dev для проблемы https://github.com/FasterXML/jackson-databind/issues/1015