Spring MVC处理请求、响应XML数据(2)
上一篇主要简单说了发送XML数据,后台对其处理的过程。本篇主要说明后台解析XML文件内容,将其设置到Java类中后返回给前台的处理方式。其中用到的实体类Student、以及相关的说明与上一篇一样,这里就不列出来了,可以参考文章Spring MVC处理XML数据(1)
返回XML示例:
1.xml文件
测试文件studentInfo.xml在src目录下
<?xml version="1.0" encoding="UTF-8"?>
<student>
<name>小明</name>
<age>18</age>
</student>
2.Controller
前台页面ajax请求读取XML文件,文件为src/studentInfo.xml,通过JAXB(Java Architecture for XML Binding)可以比较简单的设置数据到到pojo中。
@RequestMapping("/receiveXml")
@ResponseBody
public Student receiveJson() throws Exception {
JAXBContext context = JAXBContext.newInstance(Student.class);
//创建Unmarshall对象
Unmarshaller unmar = context.createUnmarshaller();
InputStream inputStream = this.getClass().getResourceAsStream("/studentInfo.xml");
//Unmarshaller对象的unmarshal方法可以进行xml到Java对象的转换
Student student = (Student) unmar.unmarshal(inputStream);
System.out.println("姓名:" + student.getName() + " 性别:" + student.getAge());
return student;
}
3.请求的js
3.1方式一:返回xml格式数据
dataType:'xml'指定了返回的数据格式为xml,之后通过jQuery处理,将其转换成xml对象,通过find方法查询对应结点。若是有多条数据,通过$.each(...)方法进行遍历即可。
//接收XML
$("#_btn_receive1").click(function(){
$.ajax({
url : "${pageContext.request.contextPath}/xml/receiveXml.do",
type : "post",
dataType : "xml",
success : function(data){
var $data = $(data);
var name = $data.find("name").text();
var age = $data.find("age").text();
console.log(name + " " + age);
}
});
});
3.2方式二:返回普通xml文档
此时dataType:'text',表示返回类型为普通文本,此时需要先将该字符串转换成xml对象,再进行解析,方法同2.1一样
$("#_btn_receive2").click(function(){
$.ajax({
url : "${pageContext.request.contextPath}/xml/receiveXml.do",
type : "post",
dataType : "text",
success : function(data){
var $data = $($.parseXML(data));
var name =$data.find("name").text();
var age = $data.find("age").text();
console.log(name + " " + age);
}
});
});
4.测试
4.1控制台
4.2浏览器控制台
5.注
(1).实体类Student需要通过@XmlRootElement、@XmlElement注解标记根元素以及普通元素;
(2).JAXB解析XML文件,相关方法需要参考资料去学习;
(3).dataTyp:'xml'时,可以发现返回是一个js对象,console.log(data)打印结果如下:
(4).dataType:'text'时,返回字符串,可以通过jQuery的$.parseXML()方法转换,console.log(data)打印结果如下:
(5).一般前后台交互常使用json,xml在某些情况下也会涉及,所以也需要相关了解下,以备不时之需嘛。。