javabean和xml相互转化的工具类

javabean和xml相互转化的工具类

 

package com.xykj.koala.course.common.util;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

/**
 * javabean和xml相互转化的工具类
 * @author junzhongliu
 * @date 2018/10/22 18:58
 */
public class JaxbUtil {

    /**
     * java对象转成xml文件
     * @param obj java对象
     * @param load 类对象
     * @param encoding 编码格式
     * @return
     * @throws JAXBException
     */
    public static String beanToXml(Object obj, Class load,String encoding) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(load);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
        StringWriter writer = new StringWriter();
        marshaller.marshal(obj, writer);
        return writer.toString();
    }

    /**
     * xml文件转换成java对象
     * @param xmlPath xml文件路径
     * @param load java对象.class
     * @param 
     * @return
     * @throws JAXBException
     * @throws IOException
     */
    @SuppressWarnings("unchecked")
    public static  T xmlToBean(String xmlPath, Class load) throws JAXBException, IOException {
        JAXBContext context = JAXBContext.newInstance(load);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        return (T) unmarshaller.unmarshal(new StringReader(xmlPath));
    }

    /**
     * JavaBean转换成xml,默认编码UTF-8
     * @param obj java对象
     * @return
     */
    public static String convertToXml(Object obj) {
        return convertToXml(obj, "UTF-8");
    }

    /**
     * JavaBean转换成xml
     * @param obj java对象
     * @param encoding 编码格式
     * @return
     */
    public 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;
    }

    /**
     * JavaBean转换成xml去除xml声明部分
     * @param obj java对象
     * @param encoding 编码
     * @return
     */
    public static String convertToXmlIgnoreXmlHead(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);
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * xml转换成JavaBean
     * @param xml xml字符串
     * @param c java字节码
     * @return
     */
    @SuppressWarnings("unchecked")
    public static  T converToJavaBean(String xml, Class 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;
    }

}

 

具体的使用方式:

package com.xykj.koala.course.common.data;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xykj.koala.course.common.util.JaxbUtil;
import com.xykj.koala.pay.entity.SignUtil;
import lombok.Data;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Map;

/**
 * 支付回调流水,将微信回调回来的xml数据格式化成json格式数据
 * 
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     
 *         
 *     
 *     10
 *     
 *         
 *     
 *     
 *         
 *     
 * 
 * @author junzhongliu
 */
@Data
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class WxPayCallBack {

    @XmlElement(name = "appid")
    private String appid;

    @XmlElement(name = "attach")
    private String attach;

    @XmlElement(name = "bank_type")
    private String bank_type;

    @XmlElement(name = "cash_fee")
    private Integer cash_fee;

    @XmlElement(name = "device_info")
    private String device_info;

    @XmlElement(name = "fee_type")
    private String fee_type;

    @XmlElement(name = "is_subscribe")
    private String is_subscribe;

    @XmlElement(name = "mch_id")
    private String mch_id;

    @XmlElement(name = "nonce_str")
    private String nonce_str;

    @XmlElement(name = "openid")
    private String openid;

    @XmlElement(name = "out_trade_no")
    private String out_trade_no;

    @XmlElement(name = "result_code")
    private String result_code;

    @XmlElement(name = "sign")
    private String sign;

    @XmlElement(name = "time_end")
    private String time_end;

    @XmlElement(name = "total_fee")
    private Integer total_fee;

    @XmlElement(name = "trade_type")
    private String trade_type;

    @XmlElement(name = "transaction_id")
    private String transaction_id;

    @XmlElement(name = "settlement_total_fee")
    private Integer settlement_total_fee;

    @XmlElement(name = "cash_fee_type")
    private String cash_fee_type;

    @XmlElement(name = "coupon_fee")
    private Integer coupon_fee;

    @XmlElement(name = "coupon_count")
    private Integer coupon_count;

    @XmlElement(name = "sign_type")
    private Integer sign_type;

    @XmlElement(name = "err_code")
    private String err_code;

    @XmlElement(name = "err_code_des")
    private String err_code_des;

    @XmlElement(name = "return_code")
    private String return_code;

    @XmlElement(name = "return_msg")
    private String return_msg;

    public static void main(String[] args) throws Exception{
        String str = "10";
        WxPayCallBack orderInfo = JaxbUtil.converToJavaBean(str, WxPayCallBack.class);
        System.out.println(JSONObject.toJSONString(orderInfo));

        Map map = JSON.parseObject(JSONObject.toJSONString(orderInfo),Map.class);
        String koalaSign = SignUtil.createSign(map);
        System.out.println(koalaSign);
        System.out.println("AADC5246AB379418CAD3073237F452D1".equals(koalaSign));
    }
}

 

你可能感兴趣的:(代码集锦)