2016-09-27 4 views
0

私は、私がマシャールしたい日付のリストを含む次のクラスを持っています。 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

答えて

0
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); 
    } 
} 

ならびにjava.util.List有するよう@XmlJavaTypeAdapter作品。しかし、アダプター・クラスの問題は、使用される日付形式です。 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'"); 
関連する問題