Ral*_*lph 60 java datetime jaxb
我无法让JAXB在Resteasy JAX-RS服务器应用程序中解组时间戳.
我的班级看起来像这样:
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "foo")
public final class Foo {
// Other fields omitted
@XmlElement(name = "timestamp", required = true)
protected Date timestamp;
public Foo() {}
public Date getTimestamp() {
return timestamp;
}
public String getTimestampAsString() {
return (timestamp != null) ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp) : null;
}
public void setTimestamp(final Date timestamp) {
this.timestamp = timestamp;
}
public void setTimestamp(final String timestampAsString) {
try {
this.timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(timestampAsString);
} catch (ParseException ex) {
this.timestamp = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢.
bdo*_*han 108
JAXB可以处理java.util.Date类.但是它期望格式:
"yyyy-MM-dd'T'HH:mm:ss"而不是"yyyy-MM-dd HH:mm:ss"
如果您想使用该日期格式,我建议使用XmlAdapter,它看起来如下所示:
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateAdapter extends XmlAdapter<String, Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public String marshal(Date v) throws Exception {
return dateFormat.format(v);
}
@Override
public Date unmarshal(String v) throws Exception {
return dateFormat.parse(v);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在timestamp属性上指定此适配器:
import java.util.Date;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "foo")
public final class Foo {
// Other fields omitted
@XmlElement(name = "timestamp", required = true)
@XmlJavaTypeAdapter(DateAdapter.class)
protected Date timestamp;
public Foo() {}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(final Date timestamp) {
this.timestamp = timestamp;
}
}
Run Code Online (Sandbox Code Playgroud)
ska*_*man 11
JAXB不能Date直接编组对象,因为它们没有足够的信息来明确.JAXB XmlGregorianCalendar为此目的引入了类,但直接使用它是非常不愉快的.
我建议将您的timestamp字段更改为a XmlGregorianCalendar,并在可能的情况下更改您的各种方法以更新此字段,同时保留您已有的公共接口.
如果你想保留这个Date字段,那么你需要实现自己的XmlAdapter类来告诉JAXB如何转换你的DateXML.
| 归档时间: |
|
| 查看次数: |
60443 次 |
| 最近记录: |