1. 程式人生 > >Java的xml與map,與Bean互轉

Java的xml與map,與Bean互轉

dde ppr XmlWriter while 信息 XML map.entry war 銀行

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;

}

Java的xml與map,與Bean互轉