微信后台------请求流程3-微信服务器xml转换

本文详细介绍了微信后台请求处理的流程,重点讲解了如何将请求字符串转换为XML,再将XML转换为Java对象的过程。利用XStream库,不仅实现了Java到XML的转换,还探讨了List集合转化为XML的方法,以及XML反向转换回Java对象,通过注解配置映射关系。

1.通过注解适配请求String

@RequestBody String requestBody
 //收到微信服务器的http:xml请求
 WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(requestBody); 
 //返回微信服务器的http:xml响应
 WxMpXmlOutMessage outMessage = this.route(inMessage);

XStream在toXML的时候对于Null值不进行标签输出

2.将请求由String-->Xml:使用 XStream

   2.1 java转换xml

public void testXml(){
		
		City city = new City();
		city.setName("北京");
		city.setDescription("中国首都");
		
		XStream xstream = new XStream();
		xstream.alias("city", City.class);//若不写这句,根标签是City的全路径名
		String xml = xstream.toXML(city);
		System.out.println(xml);
	}

<city>
  <name>北京</name>
  <description>中国首都</description>
</city>

  2.2  List集合转化为XML

	@Test
	public void test2(){
		City city = new City("天津", "直辖市");
		City city2 = new City("重庆", "也是直辖市");
		
		List<City> cityList = new ArrayList<City>();
		cityList.add(city);
		cityList.add(city2);
		
		XStream xstream2 = new XStream();
		xstream2.alias("直辖市", City.class);  //设置一个JavaBean的根标签
		xstream2.alias("cities", List.class);  // 设置整体集合的根标签,若不写,根标签变为<list>
		String c = xstream2.toXML(cityList);
		
		System.out.println(c);
	}
<cities>
  <直辖市>
    <name>天津</name>
    <description>直辖市</description>
  </直辖市>
  <直辖市>
    <name>重庆</name>
    <description>也是直辖市</description>
  </直辖市>
</cities>

2.3 XML转换为java

	@Test  //将一个xml文件中的数据读取出来,并形成集合,集合中放的是city对象
	public void test3() throws Exception{
		
		XStream xstream = new XStream();
		//起别名
		xstream.alias("city", City.class);
		xstream.alias("cities", List.class);
		
		List<City> list = (List<City>) xstream.fromXML(new FileInputStream("src/cities.xml"));
	
		for (City city : list) {
			System.out.println(city.getName()+","+city.getDescription());
		}
	}

2.4 使用注解配置映射关系

//在类上添加 @XStreamAlias("city")
//在属性上添加@XStreamAsAttribute
//如果再属性上添加 @XStreamOmitField 注解,则该属性将不会解析为 xml 中的属性

@XStreamAlias("city")
public class City {
	@XStreamAsAttribute
	private String name;
	
	@XStreamAsAttribute
	private String description;
	//封装……
	
	public City() {
		
	}
	public City(String name, String description) {
		super();
		this.name = name;
		this.description = description;
	}
	@Override
	public String toString() {
		return "City [name=" + name + ", description=" + description + "]";
	}
}
	@Test  //引入注解
	public void test4() throws Exception{
		City city1_1 = new City("长沙","娱乐之都");
		City city1_2 = new City("韶山","伟人故居");
 
		City city2_1 = new City("石家庄","河北省会");
		City city2_2 = new City("承德","避暑山庄");
 
		List<City> cities1 = new ArrayList<City>();
		cities1.add(city1_1);
		cities1.add(city1_2);
 
		List<City> cities2 = new ArrayList<City>();
		cities2.add(city2_1);
		cities2.add(city2_2);
		
		
		XStream xstream = new XStream();
		//引入一行代码,进行注解的检测
		xstream.autodetectAnnotations(true);
		System.out.println(xstream.toXML(cities1));
		System.out.println(xstream.toXML(cities2));
		
	}
}
<list>
  <city name="长沙" description="娱乐之都"/>
  <city name="韶山" description="伟人故居"/>
</list>
<list>
  <city name="石家庄" description="河北省会"/>
  <city name="承德" description="避暑山庄"/>
</list>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值