解析数组用下面这个注解
@XStreamImplicit(itemFieldName = "xmlName")
背景介绍
最近和丰桥对接,丰桥的接口的请求和相应都是 xml 格式,此前搞微信公众号开发接触过 xml 的解析,当时还没遇到这个坑。以为解析所有 xml 都是用同一个注解 @XStreamAlias(“xmlName”) ,这次遇相应快递路由状态信息是数组,就踩坑了。
常用注解
-
@XStreamAlias
- 作用就是将属性按照别名输出
-
@XStreamAsAttribute
- 作用是将类内成员作为父节点属性输出
-
@XStreamImplicit
- 集合常用的注解
小试牛刀
这是丰桥路由查询失败返回结果
<Response service=”RouteService”>
<Head>ERR</Head>
<ERROR code="4001">系统发生数据错误或运行时异常</ERROR>
</Response>
/**
* @author yulecha
* @version 1.0.0
* @ClassName SFExpressBaseResponse.java
* @Description 基础响应类
* @createTime 2019年11月25日 13:43:00
*/
@Data
@XStreamAlias(value = "Response")
public class SFExpressBaseResponse {
@XStreamAlias("Head")
private String head;
@XStreamAsAttribute
@XStreamAlias(value = "service")
private String service;
@XStreamAlias("ERROR")
private SFExpressError error;
}
/**
* @author yulecha
* @version 1.0.0
* @ClassName SFExpressError.java
* @Description 错误码及信息
* @createTime 2019年11月25日 10:20:00
*/
@Data
@XStreamAlias("ERROR")
@XStreamConverter(value = ToAttributedValueConverter.class, strings = { "content" })
public class SFExpressError {
@XStreamAsAttribute
@XStreamAlias("code")
private String code;
private String content;
}
/**
* @author yulecha
* @version 1.0.0
* @ClassName XmlTest.java
* @Description xml解析测试类
* @createTime 2019年11月25日 09:44:00
*/
public class XmlTest {
String xmlError = "<Response service=\"RouteService\">" +
"<Head>ERR</Head>" +
"<ERROR code=\"4001\">系统发生数据错误或运行时异常</ERROR>" +
"</Response>";
@Test
public void xmlParaseObjectTest() {
SFExpressBaseResponse sfExpressBaseResponse = XmlParseUtil.parseObject(xmlError, SFExpressBaseResponse.class);
System.out.println(sfExpressBaseResponse);
}
}
结果
SFExpressBaseResponse(head=ERR, service=RouteService, error=SFExpressError(code=4001, content=系统发生数据错误或运行时异常))