我不想直接在我的代码中使用XmlAdapter类的XmlJavaTypeAdapter
注释。
所以,我写了一些包装器:
class BinderWrapper<MODEL, BEAN> extends XmlAdapter<BEAN, MODEL>{
private final Binder<MODEL, BEAN> target;
private BinderWrapper(Binder<MODEL, BEAN> target){
this.target = target;
}
static <MODEL, BEAN> BinderWrapper<MODEL, BEAN> createInstance(Binder<MODEL, BEAN> binder){
return new BinderWrapper<MODEL, BEAN>(binder);
}
@Override
public MODEL unmarshal(BEAN v) throws Exception {
return target.unBean(v);
}
@Override
public BEAN marshal(MODEL v) throws Exception {
return target.toBean(v);
}
}
这是我XmlAdapter
的粘合剂。我的所有绑定器都将实现Binder
接口
public interface Binder<MODEL, BEAN> {
MODEL unBean(BEAN bean);
BEAN toBean(MODEL model);
}
但是有一个问题。 @XmlJavaTypeAdapter
需要XmlAdapter类而不包含任何包装器。我怎么能解决这个问题? - 使用其他注释/写一些配置/写一些魔术注释/ ..
感谢。
UPD
我的模型类不是 JavaBeans 。所以我想做一些两步映射:在bean中而不是在xml中。我也希望第一步注释。可能我不仅需要这个bean用于 JAXB 。真正的问题是:我可以使用一些非 JAXB 注释进行第一步吗?
答案 0 :(得分:2)
我有没有的模型类 JavaBeans的。所以我想做两步 映射:在bean中,而不是在xml中。 我想用注释做第一步 太。可能我很需要这个豆子 不仅适用于JAXB。真正的问题 是:我可以用一些非第一步做 JAXB注释?
XmlAdapter提供您正在寻找的两步映射。如果您查看下面链接的示例 Map 是不是Java Bean的对象。 XmlAdapter所做的是将其转换为可以映射的Java Bean。
您可能会发现在类型级别而不是属性级别使用@XmlJavaTypeAdapter批注更容易。在类型级别使用时,您说每个引用该类的人都应该使用适配器而不是每个属性。有关类型级别示例,请参阅JAXB and Immutable Objects上的帖子。
有关详细信息,请参阅: