Spring MVC返回XML格式的數據

 代碼:

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;
	 }  
}

截圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章