java
主页 > 软件编程 > java >

springMarchal集成xStream的完整代码

2022-03-01 | 秩名 | 点击:

Xstream是一个库, 用于将对象序列化为xml, 反之亦然, 而无需任何映射文件。注意, castor需要一个映射文件。

XStreamMarshaller类提供了将对象封送为xml的工具, 反之亦然。

1.maven GAV(1.4.11.1版本才兼容):

1

2

3

4

5

<dependency>

    <groupId>com.thoughtworks.xstream</groupId>

    <artifactId>xstream</artifactId>

    <version>1.4.11.1</version>

</dependency>

2.POJO类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package com.yang.alibabamysql.domain.bo;

 

import com.thoughtworks.xstream.annotations.XStreamAlias;

import lombok.Data;

import java.util.List;

@XStreamAlias(value = "man", impl = Man.class)

@Data

public class Man {

    @XStreamAlias("id")

    private Long id;

    @XStreamAlias("name")

    private String name;

    @XStreamAlias("sonList")

    protected List<Son> sonList;

    @XStreamAlias(value = "son", impl = Son.class)

    @Data

    public static class Son {

        @XStreamAlias("id")

        private Long id;

        @XStreamAlias("name")

        private String name;

    }

}

3.配置类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package com.yang.alibabamysql.config;

 

import com.thoughtworks.xstream.io.naming.NoNameCoder;

import com.thoughtworks.xstream.io.xml.Xpp3Driver;

import com.yang.alibabamysql.domain.bo.Man;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.oxm.xstream.XStreamMarshaller;

@Configuration

public class XStreamMarshallerConfig {

    @Bean

    public XStreamMarshaller getXStreamMarshaller() {

        XStreamMarshaller xStreamMarshaller = new XStreamMarshaller();

        xStreamMarshaller.setStreamDriver(new Xpp3Driver(new NoNameCoder()));

        xStreamMarshaller.setAnnotatedClasses(Man.class, Man.Son.class);

        xStreamMarshaller.setAutodetectAnnotations(true);

        return xStreamMarshaller;

    }

}

4.测试类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

package com.yang.alibabamysql.controller;

 

import com.google.common.collect.Lists;

import com.thoughtworks.xstream.io.naming.NoNameCoder;

import com.thoughtworks.xstream.io.xml.Xpp3Driver;

import com.yang.alibabamysql.AlibabaMysqlApplicationTests;

import com.yang.alibabamysql.domain.bo.Man;

import org.springframework.oxm.xstream.XStreamMarshaller;

import java.util.ArrayList;

class UserControllerTest extends AlibabaMysqlApplicationTests {

    private static final XStreamMarshaller xStreamMarshaller;

    static {

        xStreamMarshaller = new XStreamMarshaller();

        xStreamMarshaller.setStreamDriver(new Xpp3Driver(new NoNameCoder()));

        xStreamMarshaller.setAnnotatedClasses(Man.class, Man.Son.class);

        xStreamMarshaller.setAutodetectAnnotations(true);

    }

    public static void marshal() {

        Man.Son son = new Man.Son();

        son.setId(2L);

        son.setName("ypw");

        ArrayList<Man.Son> sonArrayList = Lists.newArrayList(son);

        Man man = new Man();

        man.setId(1L);

        man.setName("yjx");

        man.setSonList(sonArrayList);

        System.err.println(xStreamMarshaller.getXStream().toXML(man));

    public static void unmarshal() {

        String xml = "<man><id>1</id><name>yjx</name><sonList><son><id>2</id><name>ypw</name></son></sonList></man>";

        Man man = (Man) xStreamMarshaller.getXStream().fromXML(xml);

        System.err.println(man.getSonList().get(0).getName());

    public static void main(String[] args) {

        marshal();

        System.out.println("=============");

        unmarshal();

}

输出:

<man>
  <id>1</id>
  <name>yjx</name>
  <sonList>
    <son>
      <id>2</id>
      <name>ypw</name>
    </son>
  </sonList>
</man>
=============
ypw

原文链接:https://www.cnblogs.com/JaxYoun/p/15949364.html
相关文章
最新更新