javabean与xml互转(jdk自带)

package com.progth.practice.bean;

import javax.xml.bind.annotation.XmlRootElement;

/**
* xml解析bean
* <一句话功能简述>
* <功能详细描述>
*
* @author Zhangt
* @version [版本号, 2017年7月25日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
@XmlRootElement
public class ResponseBean
{

private Datas datas;

private String message;

private Integer result;

public Datas getDatas()
{
    return datas;
}

public void setDatas(Datas datas)
{
    this.datas = datas;
}

public String getMessage()
{
    return message;
}

public void setMessage(String message)
{
    this.message = message;
}

public Integer getResult()
{
    return result;
}

public void setResult(Integer result)
{
    this.result = result;
}

}

package com.progth.practice.bean;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlRootElement;

/**
* xml解析bean
* <一句话功能简述>
* <功能详细描述>
*
* @author Zhangt
* @version [版本号, 2017年7月25日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
@XmlRootElement
public class Datas
{
private ArrayList data = new ArrayList();

public ArrayList<QRCodeBean> getData()
{
    return data;
}

public void setData(ArrayList<QRCodeBean> data)
{
    this.data = data;
}

}

package com.progth.practice.bean;

import javax.xml.bind.annotation.XmlRootElement;

/**
* xml解析bean
* <一句话功能简述>
* <功能详细描述>
*
* @author Zhangt
* @version [版本号, 2017年7月25日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
@XmlRootElement
public class QRCodeBean
{

private String certNo;

private String photo;

public String getCertNo()
{
    return certNo;
}

public void setCertNo(String certNo)
{
    this.certNo = certNo;
}

public String getPhoto()
{
    return photo;
}

public void setPhoto(String photo)
{
    this.photo = photo;
}

}

package com.progth.practice.util;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
* xml与javabean互转
* <一句话功能简述>
* <功能详细描述>
*
* @author Zhangt
* @version [版本号, 2017年7月25日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class QRXMLUtil
{
/**
* 转成xml
* <一句话功能简述>
* <功能详细描述>
* @param obj
* @return [参数说明]
*
* @return String [返回类型说明]
* @throws JAXBException
* @exception throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public static String convertToXml(Object obj) throws JAXBException
{
// 创建输出流
StringWriter sw = new StringWriter();
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());

    Marshaller marshaller = context.createMarshaller();
    // 格式化xml输出的格式  
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
    // 将对象转换成输出流形式的xml  
    marshaller.marshal(obj, sw);
    return sw.toString().replace("standalone=\"yes\"", "").replace(
            "requestBean", "RequestBean");
}

/**
 * 转成对象
 * <一句话功能简述>
 * <功能详细描述>
 * @param clazz
 * @param xmlStr
 * @return [参数说明]
 * 
 * @return Object [返回类型说明]
 * @throws JAXBException 
 * @exception throws [违例类型] [违例说明]
 * @see [类、类#方法、类#成员]
 */
public static Object convertXmlStrToObject(Class clazz, String xmlStr)
        throws JAXBException
{
    xmlStr = xmlStr.replace("ResponseBean", "responseBean").replace("Data",
            "data");
    Object xmlObject = null;
    JAXBContext context = JAXBContext.newInstance(clazz);
    // 进行将Xml转成对象的核心接口  
    Unmarshaller unmarshaller = context.createUnmarshaller();
    StringReader sr = new StringReader(xmlStr);
    return unmarshaller.unmarshal(sr);
}

}

private static void main(String[] args)
{
    String xmlStr = "<?xml version="1.0" encoding="utf-8" ?><ResponseBean><datas><Data><certNo>3.......16</certNo><photo>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgc...</photo></Data></datas><message/><result>0</result></ResponseBean>";
    try
    {
        ResponseBean respBean = (ResponseBean) QRXMLUtil
                .convertXmlStrToObject(ResponseBean.class, xmlStr);
        respBean.getResult();
        respBean.getDatas();
    }
    catch (JAXBException e)
    {
        logger.error(e.getMessage(), e);
    }
}

转换后结果如下图所示:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值