在JAXB中,如何使用@XmlJavaTypeAdapters注解? [英] In JAXB, how to use @XmlJavaTypeAdapters annotation?
问题描述
当从 xml 解组到 JAXB 的 Java 类时,我想将javax.xml.datatype.XMLGregorianCalendar"更改为java.util.Date".
I want to change "javax.xml.datatype.XMLGregorianCalendar" to "java.util.Date" when unmarshalling from xml to Java class of JAXB.
但我没有在 Java 类中添加任何 @XmlJavaTypeAdapter 注释.
But I don't put any annotations of @XmlJavaTypeAdapter in Java classes.
所以,我打算尝试使用@XmlJavaTypeAdapters的注解,但我不知道如何使用它...
So, I'm going to try to use an annotation of @XmlJavaTypeAdapters, but I don't know how to use it...
请告诉我使用它的示例.
Please show me examples for using it.
推荐答案
有趣的是,您实际上并不需要将 XMLGregorianCalendar 调整为 Date,因为 JAXB 本身就支持 java.util.Date —— 就像这样:>
As an interesting aside, you don't actually need to adapt XMLGregorianCalendar to Date, since JAXB supports java.util.Date natively -- like this:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Example {
@XmlSchemaType(name = "date")
public Date publishingDate;
}
如果你需要它,@XmlJavaTypeAdapter 可以像这样工作,假设你的自定义类:
If you need it, @XmlJavaTypeAdapter can work like this, assuming your custom class:
public class SillyDate {
public SillyDate(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}
public String toString() {
return "SillyDate [year=" + year + ", month=" + month + ", day=" + day + "]";
}
public int year;
public int month;
public int day;
}
您需要一个 JAXB 可以理解的类,然后在该类和自定义类之间编写一个适配器,如下所示:
You need a class which JAXB can understand, and then write an adapter between that class and the custom class, like this:
public class SillyDateAdapter extends XmlAdapter<XMLGregorianCalendar, SillyDate> {
public SillyDate unmarshal(XMLGregorianCalendar val) throws Exception {
return new SillyDate(val.getYear(), val.getMonth(), val.getDay());
}
public XMLGregorianCalendar marshal(SillyDate val) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendarDate(val.year, val.month, val.day, 0);
}
}
现在你可以在你自己的类中使用它,就像这样:
Now you can use that in your own classes, like this:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Example2 {
@XmlSchemaType(name = "date")
@XmlJavaTypeAdapter(type=XMLGregorianCalendar.class,value =SillyDateAdapter.class)
public SillyDate publishingDate;
}
网上有很多使用@XmlJavaTypeAdapter 的好例子,比如这个 和这个一个,以及其他几个.快乐适应!
There are plenty of good examples of using the @XmlJavaTypeAdapter available on the net, like this one and this one, and several others. Happy adapting!
这篇关于在JAXB中,如何使用@XmlJavaTypeAdapters注解?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!