Для сериализации даты: какова эквивалентная аннотация @XmlJavaTypeAdapter от JAXB2 до jackson-dataformat-xml?

У меня есть веб-приложение Spring, работающее с версией 4.3.6. Он работает с XML и JSON до определенного момента.

  • Для Json я использую Jackson.
  • Для 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. проект

Чтобы сериализовать Date для JSON, я использую:

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) тоже игнорируется.

Вопрос:

Какая эквивалентная аннотация @XmlJavaTypeAdapter от JAXB2 до jackson-dataformat-xml


person Manuel Jordan    schedule 08.03.2017    source источник