Java的Bean和xml之间的转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/P923284735/article/details/84381373

转换工具类代码:

package com.tencent.sxwx.payment.postOffice.util;

import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
/**
 * 
 * @author 微软
 *
 */
public class JaxbXmlUtil {
	
	public static final String DEFAULT_ENCODING = "GBK";

	/**
	 * pojo转换成xml 默认编码UTF-8
	 *
	 * @param obj 待转化的对象
	 * @return xml格式字符串
	 * @throws Exception JAXBException
	 */
	public static String convertToXml(Object obj) throws Exception {
		return convertToXml(obj, DEFAULT_ENCODING);
	}

	/**
	 * pojo转换成xml
	 *
	 * @param obj      待转化的对象
	 * @param encoding 编码
	 * @return xml格式字符串
	 * @throws Exception JAXBException
	 */
	public static String convertToXml(Object obj, String encoding) throws Exception {
		String result = null;

		JAXBContext context = JAXBContext.newInstance(obj.getClass());
		Marshaller marshaller = context.createMarshaller();
		// 指定是否使用换行和缩排对已编组 XML 数据进行格式化的属性名称。
		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
		marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

		StringWriter writer = new StringWriter();
		writer.write("<?xml version=\"1.0\" encoding=\"GBK\" ?>\n");
		marshaller.marshal(obj, writer);
		result = writer.toString();

		return result;
	}

	/**
	 * xml转换成JavaBean
	 *
	 * @param xml xml格式字符串
	 * @param t   待转化的对象
	 * @return 转化后的对象
	 * @throws Exception JAXBException
	 */
	@SuppressWarnings("unchecked")
	public static <T> T convertToJavaBean(String xml, Class<T> t) throws Exception {
		T obj = null;
		JAXBContext context = JAXBContext.newInstance(t);
		Unmarshaller unmarshaller = context.createUnmarshaller();
		obj = (T) unmarshaller.unmarshal(new StringReader(xml));
		return obj;
	}
}

Message代码:

package com.tencent.sxwx.payment.postOffice.entityInfo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * 报文主体
 * 
 * @author guoqing
 *
 */
@XmlRootElement(name = "Message")
@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
	
	@XmlElement(name = "MsgHead")
	MsgHeadInfo head;
	
	@XmlElement(name = "MsgBody")
	MsgBodyInfo body;

	public MsgHeadInfo getHead() {
		return head;
	}

	public void setHead(MsgHeadInfo head) {
		this.head = head;
	}

	public MsgBodyInfo getBody() {
		return body;
	}

	public void setBody(MsgBodyInfo body) {
		this.body = body;
	}

}

MsgHeadInfo代码:

package com.tencent.sxwx.payment.postOffice.entityInfo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

/**
 * 退款信息
 * 
 * @author guoqing
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
public class MsgHeadInfo {

	@XmlElement
	private String transName = "";
	@XmlElement
	private String transTime = "";
	@XmlElement
	private String transSerial = "";
	@XmlElement
	private String respCode = "";
	@XmlElement
	private String respMsg = "";
	@XmlElement
	private String Mac = "";

	public String getTransName() {
		return transName;
	}

	public void setTransName(String transName) {
		this.transName = transName;
	}

	public String getTransTime() {
		return transTime;
	}

	public void setTransTime(String transTime) {
		this.transTime = transTime;
	}

	public String getTransSerial() {
		return transSerial;
	}

	public void setTransSerial(String transSerial) {
		this.transSerial = transSerial;
	}

	public String getRespCode() {
		return respCode;
	}

	public void setRespCode(String respCode) {
		this.respCode = respCode;
	}

	public String getRespMsg() {
		return respMsg;
	}

	public void setRespMsg(String respMsg) {
		this.respMsg = respMsg;
	}

	public String getMac() {
		return Mac;
	}

	public void setMac(String mac) {
		Mac = mac;
	}

}

MsgBodyInfo代码:

package com.tencent.sxwx.payment.postOffice.entityInfo;

import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlAccessType;

/**
 * 支付信息
 * 
 * @author guoqing
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
public class MsgBodyInfo {

	@XmlElement
	private String bsType="";
	@XmlElement
	private String merId="";
	@XmlElement
	private String merName="";
	@XmlElement
	private String merType="";
	@XmlElement
	private String platId="";
	@XmlElement
	private String outTradeNo="";
	@XmlElement
	private String qrCode="";
	@XmlElement
	private Integer totalAmount=0;
	public String getBsType() {
		return bsType;
	}
	public void setBsType(String bsType) {
		this.bsType = bsType;
	}
	public String getMerId() {
		return merId;
	}
	public void setMerId(String merId) {
		this.merId = merId;
	}
	public String getMerName() {
		return merName;
	}
	public void setMerName(String merName) {
		this.merName = merName;
	}
	public String getMerType() {
		return merType;
	}
	public void setMerType(String merType) {
		this.merType = merType;
	}
	public String getPlatId() {
		return platId;
	}
	public void setPlatId(String platId) {
		this.platId = platId;
	}
	public String getOutTradeNo() {
		return outTradeNo;
	}
	public void setOutTradeNo(String outTradeNo) {
		this.outTradeNo = outTradeNo;
	}
	public String getQrCode() {
		return qrCode;
	}
	public void setQrCode(String qrCode) {
		this.qrCode = qrCode;
	}
	public Integer getTotalAmount() {
		return totalAmount;
	}
	public void setTotalAmount(Integer totalAmount) {
		this.totalAmount = totalAmount;
	}
	
	
}

测试类:

package com.tencent.sxwx.payment.postOffice.test;

import com.alibaba.fastjson.JSONObject;
import com.tencent.sxwx.payment.postOffice.entityInfo.Message;
import com.tencent.sxwx.payment.postOffice.entityInfo.MsgBodyInfo;
import com.tencent.sxwx.payment.postOffice.entityInfo.MsgHeadInfo;
import com.tencent.sxwx.payment.postOffice.util.JaxbXmlUtil;

public class Test {
	public static void main(String[] args) throws Exception {
		beanToXml();
		xmlToBean();
	}
	
	public static void beanToXml() throws Exception {
		StringBuilder sb = new StringBuilder();
		MsgHeadInfo head = new MsgHeadInfo();
		MsgBodyInfo body = new MsgBodyInfo();
		Message ms = new Message();
		ms.setBody(body);
		ms.setHead(head);
		String message =JaxbXmlUtil.convertToXml(ms);
		System.out.println(message);
	}
	public static void xmlToBean() throws Exception {
		String xml = "<Message>\r\n" + 
				"    <MsgHead>\r\n" + 
				"        <transName></transName>\r\n" + 
				"        <transTime></transTime>\r\n" + 
				"        <transSerial></transSerial>\r\n" + 
				"        <respCode></respCode>\r\n" + 
				"        <respMsg></respMsg>\r\n" + 
				"        <Mac></Mac>\r\n" + 
				"    </MsgHead>\r\n" + 
				"    <MsgBody>\r\n" + 
				"        <bsType></bsType>\r\n" + 
				"        <merId></merId>\r\n" + 
				"        <merName></merName>\r\n" + 
				"        <merType></merType>\r\n" + 
				"        <platId></platId>\r\n" + 
				"        <outTradeNo></outTradeNo>\r\n" + 
				"        <qrCode></qrCode>\r\n" + 
				"        <totalAmount>0</totalAmount>\r\n" + 
				"    </MsgBody>\r\n" + 
				"</Message>\r\n" + 
				"\r\n" + 
				"";
		Message ms = JaxbXmlUtil.convertToJavaBean(xml, Message.class);
		System.out.println(JSONObject.toJSON(ms));
	}
}

控制台输出:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/P923284735/article/details/84381373