代碼:
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;
}
}
截圖: