• Java的xml与map,与Bean互转


    xml与map互转,主要使用dom4j

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.IOException;
    import java.io.StringWriter;
    import java.util.*;
    
    
    public class XmlUtils {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(XmlUtils.class);
    
        /**
         * @Auther sun
         * @DateTime 2019/3/8 下午5:15
         * @Description:
         * @Param map        生成xml的map数据
         * @Param rootName  根结点名称
         * @Return: java.lang.String
         */
        public static String map2xml(Map<String, Object> map, String rootName) {
            Document doc = DocumentHelper.createDocument();
            Element rootEle = doc.addElement(rootName);
            if (null != map && !map.isEmpty()) {
    
                Set<Map.Entry<String, Object>> set = map.entrySet();
                Iterator<Map.Entry<String, Object>> iter = set.iterator();
                while (iter.hasNext()) {
                    Map.Entry<String, Object> entry = iter.next();
                    Element ele = rootEle.addElement(entry.getKey());
                    ele.setText(String.valueOf(entry.getValue()));
                }
            } else {
                LOGGER.warn("[生成XML]Map为空");
            }
            StringWriter sw = new StringWriter();
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("utf-8");
            try {
                XMLWriter xmlWriter = new XMLWriter(sw, format);
                xmlWriter.write(doc);
            } catch (IOException ex) {
                LOGGER.error("[生成XML]生成XML数据失败", ex);
            } finally {
                try {
                    sw.close();
                } catch (IOException ex) {
                    LOGGER.error("[生成XML]关闭IO异常", ex);
                }
            }
            return sw.toString();
        }
    
    
        /**
         * @Auther sun
         * @DateTime 2019/3/11 下午1:56
         * @Description: xml 转换为 map
         * @Param strXML
         * @Return: java.util.SortedMap<java.lang.String , java.lang.String>
         */
        public static SortedMap<String, String> dom4jXMLParse(String strXML) throws DocumentException {
            SortedMap<String, String> smap = new TreeMap<String, String>();
            Document doc = DocumentHelper.parseText(strXML);
            Element root = doc.getRootElement();
            for (Iterator iterator = root.elementIterator(); iterator.hasNext(); ) {
                Element e = (Element) iterator.next();
                smap.put(e.getName(), e.getText());
            }
            return smap;
        }
    
    }

      

    java的bean与xml互转主要使用Jaxb(java自带的xml转换工具)

    public class JaxbUtils {
    
        /**
         * JavaBean转换成xml.
         *
         * @param obj
         * @return
         */
        public static String convertToXml(Object obj) {
            return convertToXml(obj, "UTF-8");
        }
    
        /**
         * JavaBean转换成xml.
         *
         * @param obj      bean实体
         * @param encoding 默认编码UTF-8
         * @return
         */
        private static String convertToXml(Object obj, String encoding) {
            String result = null;
            try {
                JAXBContext context = JAXBContext.newInstance(obj.getClass());
                Marshaller marshaller = context.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
    
                StringWriter writer = new StringWriter();
                marshaller.marshal(obj, writer);
                result = writer.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * xml转成JavaBean.
         *
         * @param xml
         * @param c
         * @return
         */
        @SuppressWarnings("unchecked")
        public static <T> T converyToJavaBean(String xml, Class<T> c) {
            T t = null;
            try {
                JAXBContext context = JAXBContext.newInstance(c);
                Unmarshaller unmarshaller = context.createUnmarshaller();
                t = (T) unmarshaller.unmarshal(new StringReader(xml));
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return t;
        }
    
    }

    对与xml要转换的bean类使用注解的方式标注(本例子使用了lombok) 

    @XmlRootElement(name = "xml") 表示根结点名称
    @Data
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "xml")
    public class CallBackResponse {
        /**
         * 返回状态码
         */
        @XmlElement(name = "return_code")
        private String returnCode;
        /**
         * 返回信息
         */
        @XmlElement(name = "return_msg")
        private String returnMsg;
        /**
         * 公众账号ID
         */
        @XmlElement
        private String appid;
        /**
         * 商户号
         */
        @XmlElement(name = "mch_id")
        private String mchId;
        /**
         * 设备号
         */
        @XmlElement(name = "device_info")
        private String deviceInfo;
        /**
         * 随机字符串
         */
        @XmlElement(name = "nonce_str")
        private String nonceStr;
        /**
         * 签名
         */
        @XmlElement
        private String sign;
        /**
         * 签名类型
         */
        @XmlElement(name = "sign_type")
        private String signType;
        /**
         * 业务结果
         */
        @XmlElement(name = "result_code")
        private String resultCode;
        /**
         * 错误代码   SUCCESS/FAIL
         */
        @XmlElement(name = "err_code")
        private String errCode;
        /**
         * 错误代码描述
         */
        @XmlElement(name = "err_code_des")
        private String errCodeDes;
        /**
         * 用户标志
         */
        @XmlElement
        private String openid;
        /**
         * 付款银行
         */
        @XmlElement(name = "bank_type")
        private String bankType;
        /**
         * 订单金额
         */
        @XmlElement(name = "total_fee")
        private Integer totalFee;
        /**
         * 微信平台订单号
         */
        @XmlElement(name = "transaction_id")
        private String transactionId;
        /**
         * 商户订单号
         */
        @XmlElement(name = "out_trade_no")
        private String orderId;
        /**
         * 支付完成时间
         */
        @XmlElement(name = "time_end")
        private String timeEnd;
        /**
         * 交易状态
         */
        @XmlElement(name = "trade_state")
        private String tradeState;
        /**
         * 交易状态描述
         */
        @XmlElement(name = "trade_state_desc")
        private String tradeStateDesc;
        /**
         * 货币种类
         */
        @XmlElement(name = "fee_type")
        private String feeType;
    
    }
  • 相关阅读:
    Knockout.Js官网学习(visible绑定)
    Entity Framework 简单增删改操作
    Knockout.Js官网学习(数组observable)
    Knockout.Js官网学习(监控属性Observables)
    Entity Framework 简单查询
    Java 使用getClass().getResourceAsStream()方法获取资源
    Virtualbox [The headers for the current running kernel were not found] (操作过程后还是失败,显示相同问题)
    为什么要在linux命令前加上 ./
    Redis need tcl 8.5 or newer
    JDK和Tomcat部署时,版本不同的问题解决
  • 原文地址:https://www.cnblogs.com/mlfz/p/10592799.html
Copyright © 2020-2023  润新知