String msg = "<xml><ToUserName><![CDATA[ww7c5ae66c]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1699255949</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[customer_acquisition]]></Event><ChangeType><![CDATA[friend_request]]></ChangeType><LinkId><![CDATA[cawcdeb84]]></LinkId><State><![CDATA[{\"clickId\":1}]]></State></xml>";
java对象:
注解很重要
package io.renren.modules.wechatWork.service;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class VxWorkCallbackDto {
private String ToUserName;
private String FromUserName;
private String CreateTime;
private String MsgType;
private String Event;
private String ChangeType;
private String LinkId;
private String State;
}
方法:
public static VxWorkCallbackDto xml2Java(String xmlStr) {
//
VxWorkCallbackDto vxWorkCallbackDto = new VxWorkCallbackDto();
JAXBContext jaxbContext = null;
try {
jaxbContext = JAXBContext.newInstance(VxWorkCallbackDto.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
vxWorkCallbackDto = (VxWorkCallbackDto) unmarshaller.unmarshal(new StringReader(xmlStr));
} catch (JAXBException e) {
log.error("xml转换对象出错:{}", e.getMessage());
e.printStackTrace();
}
return vxWorkCallbackDto;
}
最后测试:
public static void main(String[] args) {
String msg = "<xml><ToUserName><![CDATA[ww7c5ae66c1e0aa8b3]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1699255949</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[customer_acquisition]]></Event><ChangeType><![CDATA[friend_request]]></ChangeType><LinkId><![CDATA[cawcdeb845dc2db9fd]]></LinkId><State><![CDATA[{\"clickId\":1}]]></State></xml>";
//xml转java对象
VxWorkCallbackDto dto = xml2Java(msg);
System.out.println(JSONObject.toJSONString(dto));
}