document.write("");

xml字符串与DTO 转换 工具类

工具类,将xml字符串转为实体类&将实体类转为xml字符串

复制代码
import lombok.extern.slf4j.Slf4j;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;

@Slf4j
public class toXmlUtils {

    public static String toXml(Object s, Class ObjClass){
        String xmlString = "";
        try {
            JAXBContext context = JAXBContext.newInstance(ObjClass);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);

            StringWriter sw = new StringWriter();
            marshaller.marshal(s, sw);
            xmlString = sw.toString();
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return xmlString;
    }

    public static Object convertXmlToDTO(String xml, Class ObjClass) {
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(ObjClass);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            return unmarshaller.unmarshal(new StringReader(xml));
        } catch (JAXBException e) {
            log.error("XML解析失败: {}", e.getMessage());
            throw new RuntimeException("XML解析失败", e);
        }
    }
}
复制代码

 

使用示例

String xml;
try {
    xml = toXml(testDto, TestDTO.class);
} catch (Exception e) {
    throw new RuntimeException("转换XML字符串出错", e);
}

 

try {
    String xml = "...";
    TestDTO testDto = (TestDTO) convertXmlToDTO(xml, TestDTO.class);
} catch (Exception e) {
    log.error("解析xml报错", e);
}

 

testDTO示例:

复制代码
import lombok.Data;

import javax.xml.bind.annotation.*;
import java.util.List;

@Data
@XmlRootElement(name = "testDTO")
@XmlAccessorType(XmlAccessType.FIELD)
public class testDTO {

    @XmlElement(name = "xml_name")
    private String xmlName;

    @XmlElementWrapper(name = "xml_infos")
    @XmlElement(name = "xml_info")
    private List<XmlInfo> xmlInfos;

    @Data
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class XmlInfo {
        @XmlElement(name = "info_name")
        private String infoName;
        
        @XmlElementWrapper(name = "data_infos")
        @XmlElement(name = "data_info")
        private List<DataInfo> dataInfos;

    }

    @Data
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class DataInfo {
        @XmlElement(name = "data_name")
        private String dataName;
    }
}
复制代码

 

posted @   人间春风意  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示

距今时间:
1018天1.00 小时 38.30 分钟

当前新增阅读数:139507