最近做微信支付 需要传递xml格式的数据。
之前都是用map<String,String>转xml 感觉把对象属性再put到map里 很麻烦。 就想有没有能直接从javabean 到 xml的方法,网上一搜还真的有。
首先javabean 要添加@XmlRootElemen注解 因为微信要求,不加的话最外层就是类名。
@XmlRootElement(name = "xml",namespace="") public class WxPayTransfer { private String mch_appid; private String mchid; private String nonce_str; private String sign; private String partner_trade_no; private String openid; private String check_name; private String re_user_name; private String amount; private String desc; private String spbill_create_ip; }
然后 使用java自带的包 JAXBContent 就可以简单实现
WxPayTransfer obj=WxPayTransfer.builder() .mch_appid("appid") .mchid("123456") .nonce_str("test") .build(); JAXBContext jb= JAXBContext.newInstance(WxPayTransfer.class); Marshaller marshaller = jb.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);//格式化 marshaller.setProperty(Marshaller.JAXB_FRAGMENT,true); //去掉第一行声明 marshaller.marshal(obj, sw); String xml=sw.toString(); System.out.println(xml);
输出结果: