5. xml数据转换
5.1 传入xml数据
5.1.1 springmvc-config.xml配置
<!-- 使用默认配置 自动装配Jaxb2RootElementHttpMessageConverter处理xml数据转换 -->
<mvc:annotation-driven />
<!-- 主动设置配置方案 -->
<mvc:annotation-driven>
<!-- 设置不适用默认的消息转换器 -->
<mvc:message-converters register-defaults="false">
<!-- 配置spring的转换器 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
5.1.2 Controller
@Controller
@RequestMapping(value="/testXMl")
public class XmlTestController {
private static final Log logger = LogFactory.getLog(XmlTestController.class);
@RequestMapping(value="/sendxml",consumes="application/xml")
@ResponseBody
public void sendxml(@RequestBody Book book) {
logger.info(book.toString());
logger.info("接收xml数据成功");
}
}
5.1.3 jsp
<script type="text/javascript" src="../include/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../include/js/json3.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
sendxml();
});
function sendxml(){
var xmlData = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><book><id>1</id><name>我的视觉日记</name><author>王晓慧</author></book>";
$.ajax("${pageContext.request.contextPath}/testXMl/sendxml",
{
type:"post",
contentType:"application/xml",
data:xmlData,
dataType:"json",
async:true,
success:function(data){
console.log(data)
},
error:function(){
alert("数据发送失败!");
}
});
}
</script>
5.2 返回xml格式数据
5.2.1 springmvc-config.xml
- 同5.1.1
5.2.2 Controller
@Controller
@RequestMapping(value="/testXMl")
public class XmlTestController {
private static final Log logger = LogFactory.getLog(XmlTestController.class);
@RequestMapping(value="/readxml")
public @ResponseBody Book readXml() throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Book.class);
//创建一个Unmarshall对象
Unmarshaller unmar = context.createUnmarshaller();
InputStream is = this.getClass().getResourceAsStream("/book.xml");
//Unmarshall 对象的unmarshall方法可以进行xml到java对象的转换
Book book = (Book) unmar.unmarshal(is);
logger.info(book);
return book;
}
}
5.2.3 jsp
<body>
<table id="booktable" border="1" style="border-collapse: collapse;">
<tr>
<th>Id</th>
<th>书名</th>
<th>作者</th>
</tr>
</table>
</body>
<script type="text/javascript" src="../include/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../include/js/json3.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
readxml();
});
function readxml(){
$.ajax("${pageContext.request.contextPath}/testXMl/readxml",
{
dataType:"text",
type:"post",
async:true,
success:function(xml){
var id = $("id",xml).text();
var name = $("name",xml).text();
var author = $("author",xml).text();
var tr = $("<tr align='center'/>");
$("<td/>").html(id).appendTo(tr);
$("<td/>").html(name).appendTo(tr);
$("<td/>").html(author).appendTo(tr);
$("#booktable").append(tr);
console.log(xml);
},
error:function(){
alert("数据发送失败!");
}
});
}
</script>
dataType返回数据类型:
-
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
-
"xml": 返回 XML 文档,可用 jQuery 处理。
-
"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
-
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
-
"json": 返回 JSON 数据 。
-
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
-
"text": 返回纯文本字符串
网友评论