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 <T>
     * @return
     * @throws JAXBException
     * @throws IOException
     */
    @SuppressWarnings("unchecked")
    public static <T> T xmlToBean(String xmlPath, Class<T> 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> T converToJavaBean(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;
    }

}

 

具体的使用方式:

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格式数据
 * <xml>
 *     <appid>
 *         <![CDATA[wxfb71b73289534a80]]>
 *     </appid>
 *     <attach>
 *         <![CDATA[184]]>
 *     </attach>
 *     <bank_type>
 *         <![CDATA[CMBC_CREDIT]]>
 *     </bank_type>
 *     <cash_fee>
 *         <![CDATA[10]]>
 *     </cash_fee>
 *     <device_info>
 *         <![CDATA[WEB]]>
 *     </device_info>
 *     <fee_type>
 *         <![CDATA[CNY]]>
 *     </fee_type>
 *     <is_subscribe>
 *         <![CDATA[N]]>
 *     </is_subscribe>
 *     <mch_id>
 *         <![CDATA[1501438571]]>
 *     </mch_id>
 *     <nonce_str>
 *         <![CDATA[EafBARxFmeLCWwMt3obDRafWiJi5tO5N]]>
 *     </nonce_str>
 *     <openid>
 *         <![CDATA[odGdO5USvnGjtJIAktSulk5oKX-Q]]>
 *     </openid>
 *     <out_trade_no>
 *         <![CDATA[W201907091045001621001]]>
 *     </out_trade_no>
 *     <result_code>
 *         <![CDATA[SUCCESS]]>
 *     </result_code>
 *     <return_code>
 *         <![CDATA[SUCCESS]]>
 *     </return_code>
 *     <sign>
 *         <![CDATA[179871FCBFB2F3925EB01F4BD20EF545]]>
 *     </sign>
 *     <time_end>
 *         <![CDATA[20190709104518]]>
 *     </time_end>
 *     <total_fee>10</total_fee>
 *     <trade_type>
 *         <![CDATA[JSAPI]]>
 *     </trade_type>
 *     <transaction_id>
 *         <![CDATA[4200000341201907093464198905]]>
 *     </transaction_id>
 * </xml>
 * @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 = "<xml><appid><![CDATA[wxfb71b73289534a80]]></appid><attach><![CDATA[187]]></attach><bank_type><![CDATA[CMBC_CREDIT]]></bank_type><cash_fee><![CDATA[10]]></cash_fee><device_info><![CDATA[WEB]]></device_info><fee_type><![CDATA[CNY]]></fee_type><is_subscribe><![CDATA[N]]></is_subscribe><mch_id><![CDATA[1501438571]]></mch_id><nonce_str><![CDATA[4iyUaVvC7cCxMcL0UdE6yEtu5SA6Xp45]]></nonce_str><openid><![CDATA[odGdO5USvnGjtJIAktSulk5oKX-Q]]></openid><out_trade_no><![CDATA[W201907091244049624599]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code><return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[AADC5246AB379418CAD3073237F452D1]]></sign><time_end><![CDATA[20190709124458]]></time_end><total_fee>10</total_fee><trade_type><![CDATA[JSAPI]]></trade_type><transaction_id><![CDATA[4200000351201907091147515673]]></transaction_id></xml>";
        WxPayCallBack orderInfo = JaxbUtil.converToJavaBean(str, WxPayCallBack.class);
        System.out.println(JSONObject.toJSONString(orderInfo));

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值