Spring MVC处理请求、响应XML格式数据(1)
Spring MVC默认使用Jaxb2RootElementHttpMessageConverter转换XML格式数据,将请求消息转换到注解XmlRootElement和XmlType作用的类中。
JAXB是一个业界标准,可以根据XML Schema产生Java类。同时,它也提供将XML实例文档反向生成Java对象的方法,并能将Java对象的内容重新写到XML实例文档中。
JAXB常用注解@XmlRootElement、@XmlElement、@XmlAttribute等
发送XML格式数据示例:
1. 请求的js
发送xml格式数据指定contentType,使用了jQuery的ajax方法发送xml数据,所以需要引入jquery.js
$(function(){
//发送XML
$("#_btn_send").click(function(){
var xmlDocument = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<student id='1'><name>小明</name><age>18</age></student>";
$.ajax({
url : "${pageContext.request.contextPath}/xml/sendXml.do",
type : "post",
data: xmlDocument,
contentType : "application/xml",//发送数据的MIME类型
dataType : "json",//返回数据类型
success : function(data){
console.log(data);
}
});
});
});
2.简单Java类Student.java
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Student {
@XmlAttribute
private Integer id;
@XmlElement
private String name;
@XmlElement
private Integer age;
get、set...略
}
3.请求处理Controller
@RequestBody Student student表示将前台发送的XML数据设置到对应Student对象的属性中,控制台打印检查是否正确接收;同时返回json数据表示发送成功。
@RequestMapping("/sendXml")
public @ResponseBody Map<String, Object> receiveJson(@RequestBody Student student) throws Exception {
Map<String, Object> dataMap = new HashMap<String,Object>();
dataMap.put("status", "success");
if(student != null){
System.out.println("id:" + student.getId() + " 姓名:" + student.getName() + " 性别:" + student.getAge());
}else {
System.out.println("未获取到学生信息");
}
return dataMap;
}
4.结果
(1).控制台
(2).浏览器控制台
5.注
(1).springmvc.xml配置文件中由于使用了<mvc:annotation-driven/>,该配置默认装配了Jaxb2RootElementHttpMessageConverter处理XML数据
(2).建议将XML元素属性定义成普通元素
(3).发送XML数据时最好指定contentType为application/xml,否则默认为application/x-www-form-urlencoded;charset-UTF-8,此时后台也可正确获取到数据,但前台会显示415,