对于日期序列化:从JAXB2到jackson-dataformat-xml的@XmlJavaTypeAdapter的等效注释是什么?

时间:2017-03-08 22:16:57

标签: xml jackson jackson-dataformat-xml

我有一个使用4.3.6版本的Spring Web应用程序。它适用于XML和JSON,直到某些时候。

  • 对于Json,我使用杰克逊。
  • 对于XML,我曾经使用JAXB2,但现在不再使用,因为它不支持通用集合

表示通用集合,例如:

public class GenericCollection<T> {

        private Collection<T> collection;

        public GenericCollection(){
            this.collection = new LinkedHashSet<>();
        }

        public GenericCollection(Collection<T> collection){
            this.collection = collection;
        }

...

因此,对于XML,应用程序已从JABX2移至Jackson处理jackson-dataformat-xml项目

要为JSON序列化Date,我使用:

public class JsonDateSerializer extends JsonSerializer<Date> {

    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * {@inheritDoc}
     */
    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers)
            throws IOException, JsonProcessingException {
        String formattedDate = dateFormat.format(value);
        gen.writeString(formattedDate);
    }

}

并使用了如何:

@JsonProperty("fecha")
@JsonSerialize(using=JsonDateSerializer.class)
public Date getFecha() {
    return fecha;
}

对于XML,当使用JAXB2时,再次对Date序列化使用以下

public class XmlDateAdapter extends XmlAdapter<String, Date> {

    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * {@inheritDoc}
     */
    @Override
    public Date unmarshal(String v) throws Exception {
        return dateFormat.parse(v);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String marshal(Date v) throws Exception {
        return dateFormat.format(v);
    }

}

并使用了如何:

@JsonProperty("fecha")
@JsonSerialize(using=JsonDateSerializer.class)
@XmlElement(name="fecha")
@XmlJavaTypeAdapter(XmlDateAdapter.class)
public Date getFecha() {
    return fecha;
}

由于从Jaxb2迁移到jackson-dataformat-xml,我知道后者会忽略 JAXB2注释。因此现在工作:

@JsonProperty("fecha")
@JsonSerialize(using=JsonDateSerializer.class)
@JacksonXmlProperty(localName="fecha")
@XmlJavaTypeAdapter(XmlDateAdapter.class)
public Date getFecha() {
    return fecha;
}

因此从@XmlElement(name="fecha")@JacksonXmlProperty(localName="fecha")

现在的问题是@XmlJavaTypeAdapter(XmlDateAdapter.class)也被忽略了。

问题

@XmlJavaTypeAdapterJAXB2

jackson-dataformat-xml的等效注释是什么?

0 个答案:

没有答案