jabx中date类型数据 的问题 “does not have a no-arg default constructor” 给出解决问题的代码
时间: 2024-03-29 22:41:23 浏览: 86
好的,以下是使用 JAXB 适配器解决 Date 类型属性 "does not have a no-arg default constructor" 的示例代码:
```java
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class DateAdapter extends XmlAdapter<String, Date> {
@Override
public Date unmarshal(String v) throws Exception {
XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(v);
return xmlGregorianCalendar.toGregorianCalendar().getTime();
}
@Override
public String marshal(Date v) throws Exception {
XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar();
xmlGregorianCalendar.setTime(v.getTime());
return xmlGregorianCalendar.toXMLFormat();
}
}
```
该代码定义了一个适配器类 DateAdapter,用于将 Date 类型的属性转换为 XML 中的字符串类型。在 unmarshal 方法中,将 XML 字符串转换为 XMLGregorianCalendar 类型,然后再将其转换为 Date 类型;在 marshal 方法中,将 Date 类型转换为 XMLGregorianCalendar 类型,然后再将其转换为字符串类型。
在需要使用该适配器的类中,使用 @XmlJavaTypeAdapter 注解来指定使用该适配器进行转换。例如:
```java
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.Date;
@XmlRootElement
public class MyObject {
private Date date;
@XmlJavaTypeAdapter(DateAdapter.class)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
```
在上述示例中,MyObject 类中包含一个 Date 类型的属性 date,并且使用 @XmlJavaTypeAdapter 注解来指定使用 DateAdapter 适配器进行转换。这样,就可以解决 "does not have a no-arg default constructor" 的问题。
阅读全文