Сериализация XML-элемента, имеющего свойство с именем value, с использованием Jackson - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь десериализовать / сериализовать контент XML с помощью элемента ниже.

<?xml version="1.0" encoding="utf-8" ?>
<confirmationConditions>
    <condition type="NM-GD" value="something">no modification of guest details</condition>
</confirmationConditions>

Как правильно создать Java-бины с аннотациями Джексона, чтобы разобрать это правильно.Я пытался с аннотациями JAXB, и Джексон не может сказать, что не может быть value полей.Ниже приведены Java-бины. Я получил следующую ошибку:

public class Condition
{
    @JacksonXmlProperty( isAttribute = true, localName = "type" )
    private String type;
    @JacksonXmlProperty( isAttribute = true, localName = "value" )
    private String value;
    private String text;
}

Ошибка

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "" (class Condition), not marked as ignorable (3 known properties: "value", "type", "text"])
 at [Source: (File); line: 3, column: 73] (through reference chain: ConfirmationConditions["condition"]->Condition[""])

В основном я хочу отобразить содержимое элемента в поле text.У меня нет контроля над XML, поэтому изменение его не будет работать для меня.

1 Ответ

0 голосов
/ 08 февраля 2019

Здесь вам нужно добавить @ JacksonXmlText

class Condition {
    @JacksonXmlProperty(isAttribute = true)
    private String type;
    @JacksonXmlProperty(isAttribute = true)
    private String value;
    @JacksonXmlText
    private String text;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getValue() {
        return value;
    }

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

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

и проанализировать его следующим образом:

    JacksonXmlModule module = new JacksonXmlModule();
    module.setDefaultUseWrapper(false);
    XmlMapper xmlMapper = new XmlMapper(module);

    xmlMapper.readValue(
            "<condition type=\"NM-GD\" value=\"something\">no modification of guest details</condition>", Condition.class);
...