有没有人有 JaxB Annotation @XmlJavaTypeAdapter 与杰克逊一起工作的例子?尝试序列化 List 对象时,我无法使其工作。
我的情况如下所示。我必须使用 XML 注释,因为 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”:[{},{}],“类型”:“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;
}