2016-09-27 62 views
0

的名單,我有以下類,包括我想mashall日期列表。我爲Date類創建了JaxBAdapter,但似乎沒有調用它。XmlAdapter的日期

我認爲問題是,我使用的是列表,而不僅僅是一個日期變量。

你能不能給我,我應該如何編寫適配器或註釋類,因此列表中的每個元素使用適配器mashalled一些暗示?

將它JSON序列化的工作呢?我打算在我的REST Web服務上使用這些類。

Root.java

@XmlRootElement(name = "root") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    @XmlElementWrapper(name="timePeriods") 
    @XmlElement(name = "timePeriod") 
    @JsonProperty(value = "timePeriod") 
    @XmlJavaTypeAdapter(value = JaxBDateThreadSafeAdapter.class, type = Date.class) 
    private List<Date> timePeriod; 

    public Root() { 
    this(new ArrayList<String>(), new ArrayList<Date>(2)); 
    } 

    public Root(List<Date> timePeriod) { 
    this.timePeriod = new ArrayList<Date>(timePeriod); 
    } 
} 

JaxBAdapter

public class JaxBDateThreadSafeAdapter extends XmlAdapter<String, Date> { 

    /** 
    * Thread safe {@link DateFormat}. 
    */ 
    private static final ThreadLocal<DateFormat> DATE_FORMAT_TL = 
      new ThreadLocal<DateFormat>() { 

      @Override 
      protected DateFormat initialValue() { 
       // return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        // ISO 8601 format 
       return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
      } 

      }; 

    @Override 
    public String marshal(Date v) throws Exception { 
    return DATE_FORMAT_TL.get().format(v); 
    } 

    @Override 
    public Date unmarshal(String v) throws Exception { 
    return DATE_FORMAT_TL.get().parse(v); 
    } 
} 

回答

0

@XmlJavaTypeAdapter作品本身與java.util.List爲好。但是,適配器類中的問題是使用的日期格式。 JAXB(ATLEAST 2.X起)不嚴格和不報告這樣的錯誤,並悄悄地抑制它。

return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 

變化

return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");