JaxB Annotations和Jackson-空列表响应

时间:2014-11-19 03:14:47

标签: json jaxb annotations jackson xmladapter

有没有人有杰克逊的JaxB Annotation @XmlJavaTypeAdapter的例子?尝试序列化List对象时,我无法使其工作。

我的情景如下。我必须使用XML Annotations,因为bean是自动生成的,不同的模块基于bean生成XML / JSON数据 - 我的例子 -

接口A,抽象类B实现A,许多Bean都是从B派生的。如果我有一个bean类C并且有

@XmlJavaTypeAdapter(A.class,AAdapter.class)

C级{

String type;

List<B> listOfBeans;

}

AAdapter类扩展了XmlAdapter {

@Override
public Object marshal(A a)
    throws Exception {
if (a == null) {
    return null;
}
if (a.isItDerivedFromB()) {
    return a;
}  else {
    return otherAdapter.getInstance().marshal(()a);
 }
}

}

尝试序列化C的对象时,列表输出始终为空,尽管它具有所有有效对象。看起来它无法找到列表对象B

的序列化器(它调用unknownSerializer)

{   “listOfBeans”:[{},{}],   “type”:“holderForListOfBeans” }

我的对象映射器是 -

private ObjectMapper initializeJackson() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setDateFormat(new SimpleDateFormat(TWS_DATE_FORMAT));
    mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
    mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    mapper.setSerializationInclusion(Include.NON_NULL);

    // Need to use JaxB Annotation.
    JaxbAnnotationModule module = new JaxbAnnotationModule();
    mapper.registerModule(module);

    // All 64 bit fields should be quoted. Use StringSerializer for them.
    SimpleModule mySimpleModule = new SimpleModule();
    mySimpleModule.addSerializer(Long.class, new ToStringSerializer());
    mySimpleModule.addSerializer(Double.class, new ToStringSerializer());
    mapper.registerModule(mySimpleModule);

    return mapper;
}

0 个答案:

没有答案