我是Jackson XML的新手,我需要构建一个具有不同元素名称和属性但位于相同根元素下的Jackson 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";
}
如有任何建议,不胜感激。
要做到这一点,您可能需要像已经实现的那样实现更多的类,然后将相关属性添加到容器类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";
}
尽管最好将problem
的属性"封装"在一个元素中的更短的XML输出中,如下所示:
<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";
}