Джексон XML с другим именем элемента и атрибутами под корневым тегом

Я новичок в XML Джексона, и мне нужно создать XML Джексона с другим именем элемента и атрибутами, но с тем же корневым элементом.

Мои ожидаемые выходные данные в формате xml

<item name="Whatever">
 <problem_id id="12312"/>
 <problem_type type="1765"/>
 <problem_desc desc="faulty"/>
 </item>

Мой класс pojo (не знаю, как добавить остальные элементы и атрибуты)

@JacksonXmlRootElement(localName = "item")
public class ItemsDTO {

     @JacksonXmlProperty(localName = "name",isAttribute = true)
     private String name="Whatever";

}

Любые советы будут высоко оценены.


person tpal    schedule 10.04.2020    source источник


Ответы (2)


Для этого вам может потребоваться реализовать больше классов, как вы уже сделали, а затем добавить соответствующие свойства в класс контейнера ItemsDTO:

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

@JacksonXmlRootElement(localName = "item")
public class ItemsDTO {

    @JacksonXmlProperty(isAttribute = true)
    private String name = "Whatever";

    @JacksonXmlProperty(localName = "problem_id")
    private ProblemId problemId = new ProblemId();

    @JacksonXmlProperty(localName = "problem_type")
    private ProblemType problemType = new ProblemType();

    @JacksonXmlProperty(localName = "problem_desc")
    private ProblemDesc problemDesc = new ProblemDesc();
}

class ProblemId {
    @JacksonXmlProperty(isAttribute = true)
    private int id = 12312;
}

class ProblemType {
    @JacksonXmlProperty(isAttribute = true)
    private int type = 1765;
}

class ProblemDesc {
    @JacksonXmlProperty(isAttribute = true)
    private String desc = "faulty";
}

person Alex Rudenko    schedule 10.04.2020

Хотя было бы лучше иметь более короткий вывод XML со свойствами problem, «инкапсулированными» в один элемент, например:

<item name="Whatever">
  <problem id="12312" type="1765" desc="faulty"/>
</item>

Этого можно добиться с помощью следующего кода:

@JacksonXmlRootElement(localName = "item")
public class ItemDTO {

    @JacksonXmlProperty(isAttribute = true)
    private String name = "Whatever";

    @JacksonXmlProperty
    private Problem problem = new Problem();
}

class Problem {
    @JacksonXmlProperty(isAttribute = true)
    private int id = 12312;

    @JacksonXmlProperty(isAttribute = true)
    private int type = 1765;

    @JacksonXmlProperty(isAttribute = true)
    private String desc = "faulty";
}
person Alex Rudenko    schedule 10.04.2020