Джексон XML с другим именем элемента и атрибутами под тегом root - PullRequest
0 голосов
/ 10 апреля 2020

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

Мой ожидаемый 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";

}

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

Ответы [ 2 ]

0 голосов
/ 10 апреля 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";
}
0 голосов
/ 10 апреля 2020

Для этого вам может потребоваться реализовать больше классов, как вы уже сделали, а затем добавить связанные свойства в свой класс контейнера 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";
}

...