首页 > 编程语言 >java XML字符串和bean实体类互转

java XML字符串和bean实体类互转

时间:2023-05-28 11:32:39浏览次数:49  
标签:XML xml 实体类 jackson String 互转 import com fasterxml

pom引入依赖

<dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.13.1</version>
        </dependency>

实体类

package vo;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;

import java.util.List;

@Data
@JacksonXmlRootElement(localName = "res")
public class PayInfoResVo {
    /**
     * 处理结果代码:200-成功
     */
    @JacksonXmlProperty()  //此注解的localName属性可以不填,默认为字段名称,如果字段首字母是大写的话,那就必须填写了
    private String resultCode;

    /**
     * 处理结果描述
     */
    @JacksonXmlProperty()  //此注解的localName属性可以不填,默认为字段名称,如果字段首字母是大写的话,那就必须填写了
    private String resultDesc;

    /**
     * 就诊纪录信息的集合
     */
    @JacksonXmlElementWrapper(localName = "payList")  //这个是循环的根节点
    @JacksonXmlProperty()  //此注解的localName属性可以不填,默认为字段名称,如果字段首字母是大写的话,那就必须填写了
    private List<PayListInfoVo> payListInfo;
}
package vo;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;

/**
 * 就诊纪录信息
 */
@Data
@JacksonXmlRootElement()
public class PayListInfoVo {
    /**
     * 就诊流水号
     */
    @JacksonXmlProperty()
    private String clinicSeq;

    /**
     * 医院代码
     */
    @JacksonXmlProperty()
    private String hospitalId;

    /**
     * 接诊科室代码
     */
    @JacksonXmlProperty()
    private String deptId;
}

工具类

package util;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;

/**
 * XML和Bean互转工具类
 *
 * @author DaenMax
 * 2022-4-20 11:11:15
 */
public class XmlToObjectUtil {
    /**
     * XML转Bean
     *
     * @param xml
     * @param beanType
     * @param <T>
     * @return
     */
    public static <T> T convertXmlToObject(String xml, Class<T> beanType) {
        if (null != xml && !"".equals(xml)) {
            try {
                return new XmlMapper().readValue(xml, beanType);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * Bean转XML
     *
     * @param object
     * @return
     */
    public static String convertObjectToXml(Object object) {
        if (object != null) {
            try {
                XmlMapper xmlMapper = new XmlMapper();
                //设置xml格式携带版本和编码信息<?xml version='1.0' encoding='UTF-8'?>
                xmlMapper.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION);
                //字段值为null,自动忽略,不再序列化
                xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
                return xmlMapper.writeValueAsString(object);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

测试

import util.XmlToObjectUtil;
import vo.PayInfoResVo;
import vo.PayListInfoVo;

import java.util.ArrayList;
import java.util.List;

public class test {
    public static void main(String[] args) {
        make();
        analysis();
    }

    /**
     * 生成
     */
    public static void make() {
        PayInfoResVo payInfoResVo = new PayInfoResVo();
        payInfoResVo.setResultCode("200");
        payInfoResVo.setResultDesc("成功");
        List<PayListInfoVo> list = new ArrayList<>();

        PayListInfoVo payListInfoVo1 = new PayListInfoVo();
        payListInfoVo1.setClinicSeq("123456");
        payListInfoVo1.setHospitalId("阿萨德");
        payListInfoVo1.setDeptId("fff");
        list.add(payListInfoVo1);

        PayListInfoVo payListInfoVo2 = new PayListInfoVo();
        payListInfoVo2.setClinicSeq("98465");
        payListInfoVo2.setHospitalId("设定图");
        payListInfoVo2.setDeptId("bbb");
        list.add(payListInfoVo2);

        PayListInfoVo payListInfoVo3 = new PayListInfoVo();
        payListInfoVo3.setClinicSeq("4567854");
        payListInfoVo3.setHospitalId("换接口");
        payListInfoVo3.setDeptId("jjj");
        list.add(payListInfoVo3);
        payInfoResVo.setPayListInfo(list);
        String xml = XmlToObjectUtil.convertObjectToXml(payInfoResVo);
        System.out.println(xml);
    }

    /**
     * 解析
     */
    public static void analysis() {
        String xml = "<?xml version='1.0' encoding='UTF-8'?><res><resultCode>200</resultCode><resultDesc>成功</resultDesc><payList><payListInfo><clinicSeq>123456</clinicSeq><hospitalId>阿萨德</hospitalId><deptId>fff</deptId></payListInfo><payListInfo><clinicSeq>98465</clinicSeq><hospitalId>设定图</hospitalId><deptId>bbb</deptId></payListInfo><payListInfo><clinicSeq>4567854</clinicSeq><hospitalId>换接口</hospitalId><deptId>jjj</deptId></payListInfo></payList></res>\n";
        PayInfoResVo payInfoResVo = XmlToObjectUtil.convertXmlToObject(xml, PayInfoResVo.class);
        System.out.println(payInfoResVo);
    }

}

效果

java XML字符串和bean实体类互转_字段

标签:XML,xml,实体类,jackson,String,互转,import,com,fasterxml
From: https://blog.51cto.com/daen/6364900

相关文章

  • 快捷转换/互转 Markdown 文档和 TypeScript/TypeDoc 注释
    背景作为文档工具人,经常需要把代码里面的注释转换成语义化的Markdown文档,有时也需要进行反向操作。以前是写正则表达式全局匹配,时间长了这种方式也变得繁琐乏味。所以写了脚本来互转,增加一些便捷性。解决方案注释转Markdown下载地址:https://github.com/mazeyqian/go-gin-ge......
  • xml,DTD,
               ......
  • MybatisPlusGenerator 实体类 xml dao 生成工具
    packagecom.thtf.zwdsj.gongjia.config;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.baomidou.mybatisplus.generator.FastAutoGenerator;importcom.baomidou.mybatisplus.generator.config.OutputFile;importcom.baomidou.mybatisplus.gener......
  • 查找xml cdata 节点并去掉 CDATA 节点标记
    内容如下<?xmlversion="1.0"encoding="UTF-8"?><transstatus><transname>C-QXZSPJ-QXZSPJ-015-1</transname><id>2ca8df47-3b2d-4d8f-8b70-be68448dd97d</id><status_desc>Finished</status......
  • FLEX实践—XML、XMLList、XMLListCollection、ArrayCollection关系转换
    在本实例中将从一个XML对象通过层层转换最终变为ArrayCollection对象  <?xmlversion="1.0"encoding="utf-8"?><mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">......
  • FLEX AIR实践—FLEX AIR XML Encode Bug
     这几天在用AIR程序通过WebService进行数据传输时发现了以下问题:用WebService传输‘A&B’内容到目的地,再从目的地将数据通过WebService获取到本地,结果数据变成了'A&amp;B';于是开始进行以下测试:将'A&B'替换成'A&amp;B'——>获取结果为'A&amp;amp;B'测试了其他转义字符也得到了同样......
  • FLEX实践—XML HttpService加载错误
    主应用代码:<?xmlversion="1.0"encoding="utf-8"?><mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle" creationComplete="init......
  • FLEX实践—加载XML文件错误
        这两天在研究一个FLEX小相册,准备做一个超级简单的纯FLEX相册,没想到在读取XML文件的时候遇到了这样一个问题:    1)用FLEXBUILDER创建了一个FLEX工程    2)写了一个MXML文件,一个XML文件    3)在程序中用HTTPService和URLRequest两种方法分别读取XML文件内容 ......
  • Python图片与Base64相互转换
    importbase64#必须的pic=open("img.png","rb")#读取本地文件pic_base=base64.b64encode(pic.read())#本地文件转Base64数据,此时会出现编码带b'' 的情况pic_base=pic_base.decode('utf-8')#修正格式pic.close()#关闭importbase64pic=open("img.png&q......
  • Java集合互转,集合转换
    集合之间的互转确认JDK是否支持如下集合的转换CollectorsObjects参考:https://blog.csdn.net/winterking3/article/details/116457573List<T>转Map<String,T>PHP:Map<String,T>array_combine(()->T::getXXX,List<T>list);Java:privatestatic<T,......