Почему десериализация XML Джексона не учитывает какие-либо аннотации? - PullRequest
0 голосов
/ 31 января 2019

Я читал руководства по десериализации XML Джексона ( # 1 , # 2 ).Я попытался следовать примерам, написав некоторый код Java:

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.xml.XmlMapper;

public class JacksonDemo {
    @JsonPropertyOrder({"age", "id", "name"})
    public static class Person {
        @JsonProperty("_id")
        public String id;
        public String name;
        public int age;
        @JsonIgnore
        public String note;
    }

    public static void main(String[] args) throws Exception {
        XmlMapper mapper = new XmlMapper();
        Person value = new Person();
        value.age = 4;
        value.id = "12345";
        value.name = "George";
        value.note = "Invalid";
        String s = mapper.writeValueAsString(value);
        System.out.println(s);
    }
}

В соответствии с инструкциями это должно привести к следующему выводу:

<Person><age>4</age><_id>12345</_id><name>George</name></Person>

Однако вместо этого это приводит кследующий ошибочный вывод:

<Person><id>12345</id><name>George</name><age>4</age><note>Invalid</note></Person>

Свойства расположены в неправильном порядке, поле «id» содержит неверный элемент XML, а поле «note» неправильно включено.Предположительно, различные java-аннотации должны изменить поведение Джексона, но кажется, что все аннотации игнорируются.Кто-нибудь знает, почему это так?

Это с jackson-xml-databind 0.6.2, jackson-annotations 2.6.0 и jackson 2.6.5.

1 Ответ

0 голосов
/ 31 января 2019

jackson-xml-databind в версии 0.6.2 был выпущен Nov 11, 2011.В связанных статьях есть предложение использовать библиотеку jackson-dataformat-xml.

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.0</version>
</dependency>

Самая новая версия - 2.9.8, и я предлагаю ее использовать.Ниже вы можете найти Maven зависимостей, для которых ваш пример должен работать должным образом:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version.core}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version.core}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>${jackson.version.core}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version.core}</version>
</dependency>

, где jackson.version.core равно 2.9.8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...