异常信息
将图文消息对象转换为xml时,格式出错
<xml>
<ToUserName>oVICC0pcZLLPZUowr_wNAxiwTzeo</ToUserName>
<FromUserName>gh_d6acc2ca6533</FromUserName>
<CreateTime>1523177601677</CreateTime>
<MsgType>news</MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item> // 这里出错 这是Articles类中item的list集合
<com.example.vo.item> // 出错这是集合中每个item类对象
<Title>图文消息测试</Title>
<Description>第一个</Description>
<PicUrl>http://f.hiphotos.baidu.com/image/pic/item/8694a4c27d1ed21bfb91c832a66eddc450da3f89.jpg</PicUrl>
<Url>https://www.baidu.com/</Url>
</com.example.vo.item>
<com.example.vo.item>
<Title>图文消息测试</Title>
<Description>第二个</Description>
<PicUrl>http://f.hiphotos.baidu.com/image/pic/item/6159252dd42a283441d4d0dc50b5c9ea14cebff3.jpg</PicUrl>
<Url>https://www.baidu.com/</Url>
</com.example.vo.item>
</item>
</Articles>
</xml>
解决方法
网上查资料时,发现一种解决方法,是在根类中直接有一个item的list集合,省去了Articles类,通过这种方法发现,并没有解决问题
方法链接:https://www.cnblogs.com/cxchanpin/p/7208440.html
执行结果:
<xml>
<ToUserName>oVICC0pcZLLPZUowr_wNAxiwTzeo</ToUserName>
<FromUserName>gh_d6acc2ca6533</FromUserName>
<CreateTime>1523179217834</CreateTime>
<MsgType>news</MsgType>
<ArticleCount>2</ArticleCount>
<item> // 这里为不同处
<com.example.vo.item>
<Title>图文消息测试</Title>
<Description>第一个</Description>
<PicUrl>http://f.hiphotos.baidu.com/image/pic/item/8694a4c27d1ed21bfb91c832a66eddc450da3f89.jpg</PicUrl>
<Url>https://www.baidu.com/</Url>
</com.example.vo.item>
<com.example.vo.item>
<Title>图文消息测试</Title>
<Description>第二个</Description>
<PicUrl>http://f.hiphotos.baidu.com/image/pic/item/6159252dd42a283441d4d0dc50b5c9ea14cebff3.jpg</PicUrl>
<Url>https://www.baidu.com/</Url>
</com.example.vo.item>
</item>
</xml>
最后发现,使用xstream解析时,可以设置忽略节点和设置节点的别名
参考博文:https://www.cnblogs.com/fengmingyue/p/6084100.html
代码实现
public static String messageToxml(BaseMessage message) {
XStream xStream = new XStream();
// xStream.alias("",List.class); // 将图文消息列表中的List类型指定为“” 经验证 这种方法不行
xStream.addImplicitCollection(Articles.class,"item");// 将Articles类中的item 忽略
xStream.alias("item",item.class);//将类的全限定名改为item
xStream.alias("xml", message.getClass());
return xStream.toXML(message);
}
执行结果:
<xml>
<ToUserName>oVICC0pcZLLPZUowr_wNAxiwTzeo</ToUserName>
<FromUserName>gh_d6acc2ca6533</FromUserName>
<CreateTime>1523180542636</CreateTime>
<MsgType>news</MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title>图文消息测试</Title>
<Description>第一个</Description>
<PicUrl>http://f.hiphotos.baidu.com/image/pic/item/8694a4c27d1ed21bfb91c832a66eddc450da3f89.jpg</PicUrl>
<Url>https://www.baidu.com/</Url>
</item>
<item>
<Title>图文消息测试</Title>
<Description>第二个</Description>
<PicUrl>http://f.hiphotos.baidu.com/image/pic/item/6159252dd42a283441d4d0dc50b5c9ea14cebff3.jpg</PicUrl>
<Url>https://www.baidu.com/</Url>
</item>
</Articles>
</xml>