springboot项目jackson处理xml报文数据

1.工具介绍

1:maven仓库搜索:jackson-dataformat-xml

仓库地址:https://mvnrepository.com/

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.16.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.16.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.16.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2:在pom.xml中引入后就可以

2.使用方式代码

1.处理单个实体类

1:创建实体类(处理单个实体类)

@Data
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "root")//设置根节点名
public class Student implements Serializable {
    @JacksonXmlProperty(localName = "WorkId")//设置xml字符串的字段别名
    private String workId;
    @JacksonXmlProperty(localName = "NAME")
    private String name;
//    @JacksonXmlProperty(localName = "age")
    private String age; //不加就是属性名
 
    @Override
    public String toString() {
        return "{" +
                "workId='" + workId + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

2:处理方法

public static void main(String[] args) {
       //工具处理对象
        XmlMapper mapper = new XmlMapper();
        //添加<?xml version='1.0' encoding='UTF-8'?> 标签
        mapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        try {
            Student student = new Student();
            student.setWorkId("0001");
            student.setName("小王");
            student.setAge("29");
           //将对象转化成字符串
            String xmlStr = mapper.writeValueAsString(student);
            log.info("转化的xml是:"+xmlStr);
            //将字符串转化成对象
            Student student1 = mapper.readValue(xmlStr, Student.class);
            log.info("转化的对象数据:"+student1.toString());
         
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

3:处理结果

转化的xml是:<?xml version='1.0' encoding='UTF-8'?><root><age>29</age><WorkId>0001</WorkId><NAME>小王</NAME></root>
转化的对象数据:{workId='0001', name='小王', age='29'}

2.处理泛型

1:处理类似这种

<?xml version='1.0' encoding='UTF-8'?>
<service>
    <Head>
        <TxCode>111111</TxCode>
        <RetCode>0000</RetCode>
        <RetMsg>交易成功</RetMsg>
        <note/>
    </Head>
    <Body>
        <sdoList>
            <sdo>
                <sdo1>111</sdo1>
                <sdo2>111</sdo2>
                <sdo3>111</sdo3>
            </sdo>
            <sdo>
                <sdo1>111</sdo1>
                <sdo2>111</sdo2>
                <sdo3>111</sdo3>
            </sdo>
        </sdoList>
        <Name>小王</Name>
        <Address>北京一号垃圾桶17号床位</Address>
        <Age>25</Age>
        <Sex>男</Sex>
    </Body>
</service>

2:对应实体类

/**
 * 请求头
 */
@Data
@ToString
@JacksonXmlRootElement(localName = "Head")
public class ReqHead {
    @JacksonXmlProperty(localName = "TxCode")
    private String txCode;
    @JacksonXmlProperty(localName = "RetCode")
    private String retCode;
    @JacksonXmlProperty(localName = "RetMsg")
    private String retMsg;
    @JacksonXmlProperty(localName = "note")
    private String note;
}
/**
 * 请求体
 */
@Data
@JacksonXmlRootElement(localName = "Body")
public class ReqXmlBody {
    @JacksonXmlProperty(localName = "Name")
    private String name;
    @JacksonXmlProperty(localName = "Address")
    private String address;
    @JacksonXmlProperty(localName = "Age")
    private String age;
    @JacksonXmlProperty(localName = "Sex")
    private String sex;
    // @JacksonXmlProperty(localName = "sdoList")
    @JacksonXmlElementWrapper(localName = "sdoList")//序列化
    private List<Sdo> sdo; 
    //这里如果使用@JacksonXmlProperty注解,集合里的根节点名称设置不了
    //没有找到解决的(这里能暂时解决)
}
/**
 * 整体处理
 * @param <T>
 */
@Data
@ToString
@JacksonXmlRootElement(localName = "service")//根节点
public class ReqMessage<T> implements Serializable {
    @JacksonXmlProperty(localName = "Head")
    private ReqHead head;//请求头对象
    @JacksonXmlProperty(localName = "Body")
    private T body;//泛型消息体
}

3:处理代码

     /**
     * 对象转xml
     */
    @PostMapping("objectToXml")
    public String objectToXml() throws JsonProcessingException {
        ReqMessage<ReqXmlBody> data = new ReqMessage<>();
        ReqHead head = new ReqHead();
        head.setTxCode("111111");
        head.setRetCode("0000");
        head.setRetMsg("交易成功");
        ReqXmlBody body = new ReqXmlBody();
        body.setName("小王");
        body.setAddress("北京一号垃圾桶17号床位");
        body.setAge("25");
        body.setSex("男");
        data.setHead(head);
        data.setBody(body);
        List<Sdo> list = new ArrayList<>();
        Sdo sdo = new Sdo();
        sdo.setSdo1("111");
        sdo.setSdo2("111");
        sdo.setSdo3("111");
        Sdo sdo2 = new Sdo();
        sdo2.setSdo1("111");
        sdo2.setSdo2("111");
        sdo2.setSdo3("111");
        list.add(sdo);
        list.add(sdo2);
        body.setSdo(list);
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        String xmlString = xmlMapper.writeValueAsString(data);
        log.info("对象转xml:{}", xmlString);

        //转化成对应实体类
ReqMessage<ReqXmlBody> data = mapper.readValue(xmlString, new TypeReference<ReqMessage<ReqXmlBody>>() {
           });
   log.info("xml转对转:{}", data );
        return xmlString;
    }







  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以使用Spring MVC框架来处理XML格式的请求和响应。在Java中,可以使用JAXB(Java Architecture for XML Binding)库来实现XML格式的数据绑定和解析。 在Spring Boot中,可以使用以下步骤来处理XML格式的请求和响应: 1. 添加依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency> ``` 2. 配置消息转换器 在Spring Boot的配置文件application.properties中添加以下配置: ``` spring.http.converters.preferred-json-mapper=xml ``` 这将会配置Spring Boot使用Jackson库的XML格式转换器。 3. 创建XML实体类 创建Java类来表示XML报文的结构,使用JAXB注解来标记类和属性。 例如,假设我们要处理以下XML报文: ``` <user> <id>1</id> <name>John Doe</name> <email>john.doe@example.com</email> </user> ``` 我们可以创建以下Java类: ``` @XmlRootElement(name = "user") public class User { @XmlElement private int id; @XmlElement private String name; @XmlElement private String email; // getters and setters } ``` 4. 处理XML请求和响应 在Spring MVC的控制器中,使用@RequestBody注解来接收XML格式的请求,并使用@ResonseBody注解返回XML格式的响应。 例如: ``` @PostMapping("/users") @ResponseBody public User createUser(@RequestBody User user) { // process user return user; } ``` 此时,Spring Boot应该已经能够处理XML格式的请求和响应了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值