Fastxml сериализация атрибута

Я использую fasterxml 2.9.4, как показано ниже, и пытаюсь сериализовать класс CurrencyAndAmount внутри родительского класса как:

<ParentClass Currency="USD">100000</ParentClass>

Но вместо этого я опускаюсь ниже. Документация предполагает, что isAttribute - это то, что мне нужно, у меня не работает. Что мне не хватает? Заранее благодарим вас за любые указатели в правильном направлении.

<ParentClass>100000</ParentClass>

Зависимости:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.4</version>
 </dependency>
 <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.9</version>
 </dependency>

XmlMapper конфигурация:

mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
AnnotationIntrospector primary = new JacksonAnnotationIntrospector();
AnnotationIntrospector secondary = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance());
mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(primary, secondary));

POJO:

public class CurrencyAndAmount {
    @JacksonXmlText
    protected BigDecimal value;
    @JacksonXmlProperty(localName = "Currency", isAttribute = true)
    protected String currency;

    @JsonValue
    public BigDecimal getValue() {
        return value;
    }

    public void setValue(BigDecimal value) {
        this.value = value;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String value) {
        this.currency = value;
    }
}

person mba12    schedule 17.09.2019    source источник


Ответы (1)


Вам следует удалить JsonValue аннотацию и упростить POJO, чтобы:

class CurrencyAndAmount {

    @JacksonXmlText
    protected BigDecimal value;

    @JacksonXmlProperty(localName = "Currency", isAttribute = true)
    protected String currency;

    ...
}
person Michał Ziober    schedule 26.10.2019