代码:
readxml.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>测试返回XML格式的数据</title>
- <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
- <script type="text/javascript" src="js/json2.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- readxml();
- });
- function readxml(){
- $.ajax("${pageContext.request.contextPath}/readxml",// 发送请求的URL字符串。
- {
- dataType : "text", // 预期服务器返回的数据类型。
- type : "POST", // 请求方式 POST或GET
- async: true , // 默认设置下,所有请求均为异步请求。如果设置为false,则发送同步请求
- // 请求成功后的回调函数。
- success :function(xml){
- // 获得xml数据的id,name,author
- 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);
- },
- // 请求出错时调用的函数
- error:function(){
- alert("数据接收失败");
- }
- });
- }
- </script>
- </head>
- <body>
- <table id="booktable" border="1" style="border-collapse: collapse;">
- <tr align="center">
- <th>编号</th>
- <th>书名</th>
- <th>作者</th>
- </tr>
- </table>
- </body>
- </html>
book.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <book>
- <id>1</id>
- <name>Spring MVC企业应用实战</name>
- <author>海哥</author>
- </book>
Book.java
- package com.bean;
- import java.io.Serializable;
- import javax.xml.bind.annotation.XmlElement;
- import javax.xml.bind.annotation.XmlRootElement;
- // @XmlRootElement表示XML文档的根元素
- @XmlRootElement
- public class Book implements Serializable {
- private Integer id;
- private String name;
- private String author;
- public Book() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Book(Integer id, String name, String author) {
- super();
- this.id = id;
- this.name = name;
- this.author = author;
- }
- public Integer getId() {
- return id;
- }
- // 该属性作为xml的element
- @XmlElement
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- @XmlElement
- public void setName(String name) {
- this.name = name;
- }
- public String getAuthor() {
- return author;
- }
- @XmlElement
- public void setAuthor(String author) {
- this.author = author;
- }
- @Override
- public String toString() {
- return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";
- }
- }
BookController.java
- package com.control;
- import java.io.InputStream;
- import javax.xml.bind.JAXBContext;
- import javax.xml.bind.Unmarshaller;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import com.bean.*;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
- @Controller
- public class BookController {
- private static final Log logger = LogFactory.getLog(BookController.class);
- // @RequestBody Book book会将传递的xml数据自动绑定到Book对象
- @RequestMapping(value="/sendxml", method=RequestMethod.POST)
- public void sendxml(@RequestBody Book book) {
- logger.info(book);
- logger.info("接收XML数据成功");
- }
- // @ResponseBody 会将Book自动转成XML数据返回
- @RequestMapping(value="/readxml", method=RequestMethod.POST)
- public @ResponseBody Book readXml()throws Exception {
- // 通过JAXBContext的newInstance方法,传递一个class就可以获得一个上下文
- JAXBContext context = JAXBContext.newInstance(Book.class);
- // 创建一个Unmarshall对象
- Unmarshaller unmar = context.createUnmarshaller();
- InputStream is = this.getClass().getResourceAsStream("/book.xml");
- // Unmarshall对象的unmarshal方法可以进行xml到Java对象的转换
- Book book = (Book) unmar.unmarshal(is);
- logger.info(book);
- return book;
- }
- }
截图: