微信开发 回复图文消息异常——XML信息格式出错

异常信息

将图文消息对象转换为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>

猜你喜欢

转载自blog.csdn.net/sinat_36553913/article/details/79855936