Serialization 使用XmlMapper序列化递归或复合对象

Serialization 使用XmlMapper序列化递归或复合对象,serialization,composite,jackson-dataformat-xml,xmlmapper,Serialization,Composite,Jackson Dataformat Xml,Xmlmapper,我在build.gradle文件中使用以下jackson xml依赖项。 “com.fasterxml.jackson.dataformat:jackson dataformat xml:2.11.3” 我的复合类如下所示: @Data @NoArgsConstructor @AllArgsConstructor class Person { private int noOfkids; private String spouseName

我在build.gradle文件中使用以下jackson xml依赖项。 “com.fasterxml.jackson.dataformat:jackson dataformat xml:2.11.3”

我的复合类如下所示:

  @Data
    @NoArgsConstructor
    @AllArgsConstructor
    class Person {
        private int noOfkids;
        private String spouseName;
        private List<Person> children = new ArrayList<>();
        
        public void addChildren(Person p) {
            children.add(p);
            
        }
}
<Person>
    <noOfkids>2</noOfkids>
    <spouseName>spouse</spouseName>
    <children>
       <noOfkids>1</noOfkids>
       <spouseName>child1 - spouse</spouseName>
       <children>
           <noOfkids>2</noOfkids>
           <spouseName>childOfChild1 - spouse</spouseName>
        </children>
    </children>
    </children>
       <noOfkids>1</noOfkids>
       <spouseName>child2 - spouse</spouseName>
    <children/>
</Person>
<Person>
  <noOfkids>2</noOfkids>
  <spouseName>spouse</spouseName>
  <children><children><noOfkids>1</noOfkids><spouseName>child1 - spouse</spouseName><children>
    <children><noOfkids>2</noOfkids><spouseName>childOfChild1 - spouse</spouseName><children/></children></children>
    </children><children><noOfkids>1</noOfkids><spouseName>child2 - spouse</spouseName><children/>
    </children></children>
</Person>
我期望输出如下:

  @Data
    @NoArgsConstructor
    @AllArgsConstructor
    class Person {
        private int noOfkids;
        private String spouseName;
        private List<Person> children = new ArrayList<>();
        
        public void addChildren(Person p) {
            children.add(p);
            
        }
}
<Person>
    <noOfkids>2</noOfkids>
    <spouseName>spouse</spouseName>
    <children>
       <noOfkids>1</noOfkids>
       <spouseName>child1 - spouse</spouseName>
       <children>
           <noOfkids>2</noOfkids>
           <spouseName>childOfChild1 - spouse</spouseName>
        </children>
    </children>
    </children>
       <noOfkids>1</noOfkids>
       <spouseName>child2 - spouse</spouseName>
    <children/>
</Person>
<Person>
  <noOfkids>2</noOfkids>
  <spouseName>spouse</spouseName>
  <children><children><noOfkids>1</noOfkids><spouseName>child1 - spouse</spouseName><children>
    <children><noOfkids>2</noOfkids><spouseName>childOfChild1 - spouse</spouseName><children/></children></children>
    </children><children><noOfkids>1</noOfkids><spouseName>child2 - spouse</spouseName><children/>
    </children></children>
</Person>

2.
配偶
1.
子女1-配偶
2.
子女1-配偶
1.
子女2-配偶
但我得到的序列化xml如下所示:

  @Data
    @NoArgsConstructor
    @AllArgsConstructor
    class Person {
        private int noOfkids;
        private String spouseName;
        private List<Person> children = new ArrayList<>();
        
        public void addChildren(Person p) {
            children.add(p);
            
        }
}
<Person>
    <noOfkids>2</noOfkids>
    <spouseName>spouse</spouseName>
    <children>
       <noOfkids>1</noOfkids>
       <spouseName>child1 - spouse</spouseName>
       <children>
           <noOfkids>2</noOfkids>
           <spouseName>childOfChild1 - spouse</spouseName>
        </children>
    </children>
    </children>
       <noOfkids>1</noOfkids>
       <spouseName>child2 - spouse</spouseName>
    <children/>
</Person>
<Person>
  <noOfkids>2</noOfkids>
  <spouseName>spouse</spouseName>
  <children><children><noOfkids>1</noOfkids><spouseName>child1 - spouse</spouseName><children>
    <children><noOfkids>2</noOfkids><spouseName>childOfChild1 - spouse</spouseName><children/></children></children>
    </children><children><noOfkids>1</noOfkids><spouseName>child2 - spouse</spouseName><children/>
    </children></children>
</Person>

2.
配偶
1子女1-配偶
2儿童1-配偶
1子女2-配偶

有人能帮我解决这个问题吗?

如果我使用JAXB,这很好。StringWriter编写器=新的StringWriter();JAXBContext context=JAXBContext.newInstance(Person.class);Marshaller m=context.createMarshaller();m、 封送处理(新JAXBElement(新QName(Person.class.getSimpleName()),Person.class,p1),编写器);System.out.println(writer.toString());//这是给我想要的输出