有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将jodatime与jaxb绑定

我要上这样的课

@XmlRootElement(name = "executionStats")
public class ScriptExecutionStatistics {

private DateTime start;
private DateTime end;

public ScriptExecutionStatistics() { }

public ScriptExecutionStatistics(DateTime start, DateTime end) {
    this.start = start;
    this.end = end;
}

@XmlAttribute
public DateTime getStart() {
    return start;
}

public void setStart(DateTime start) {
    this.start = start;
}

@XmlAttribute
public DateTime getEnd() {
    return end;
}

public void setEnd(DateTime end) {
    this.end = end;
}

}

我想用xml对它进行序列化,所以看起来像这样

<scriptExecutionStatistics start="17.08.2015 18:17:00" end="17.08.2015 18:18:00" />

我知道,如果我想将joda time与jaxb绑定,就需要一个适配器,但令人困惑的是,我并没有真正理解它。所以我从

public class DateTimeAdapter extends XmlAdapter<ScriptExecutionStatistics, DateTime>{
private static DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");

@Override
public DateTime unmarshal(ScriptExecutionStatistics vt) throws Exception {
    throw new UnsupportedOperationException("Not supported yet.");
}

@Override
public ScriptExecutionStatistics marshal(DateTime bt) throws Exception {
    ScriptExecutionStatistics stats = new ScriptExecutionStatistics();

}

}

你能帮我把它做完吗。 提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    DateTimeAdapter应该封送/取消封送DateTimeString例如

    public class DateTimeAdapter extends XmlAdapter<String, DateTime>{
       private static DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    
       @Override
       public DateTime unmarshal(String vt) throws Exception {
           return dtf.parseDateTime(vt);
       }
    
       @Override
       public String marshal(DateTime bt) throws Exception {
           return dtf.print(bt);
    
       }
    }
    

    此外,您还应该使用@XmlJavaTypeAdapter注释ScriptExecutionStatistics中适当的字段/getter

    @XmlJavaTypeAdapter(DateTimeAdapter.class)
    @XmlAttribute
    public DateTime getStart() {
        return start;
    }