Spring MVC Controller 返回XML數據

項目框架使用的是Spring MVC框架,在Controller中返回的數據格式一直用的是Json,但是最近項目需求需要返回XMl格式的數據,於是藉助萬能的互聯網,找到了一些方法,一下方法爲我經驗總結。

##項目環境

  • Spring 4.0.5.RELEASE
  • JDK 1.7
  • Eclipse
  • Maven
    ##pom.xml添加依賴庫
<properties>
	<spring.version>4.0.5.RELEASE</spring.version>
</properties>
<dependencies>
	<!-- Spring 4 dependencies -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
</dependencies>

##創建實體類JavaBean
在com.mybatis.model中創建一個簡單的實體類,Coffee.java,添加JAXB註解(@XmlRootElement,@XmlElement),它會自動轉換成XML,JAXB已經包含在JDK1.6中了,不需要額外添加依賴庫,只需要使用註解,Spring會自動轉換成XML

package com.mybatis.model;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "coffee")
public class Coffee {
	String name;
	int quanlity;

	public String getName() {
		return name;
	}

	@XmlElement
	public void setName(String name) {
		this.name = name;
	}

	public int getQuanlity() {
		return quanlity;
	}

	@XmlElement
	public void setQuanlity(int quanlity) {
		this.quanlity = quanlity;
	}

	public Coffee(String name, int quanlity) {
		this.name = name;
		this.quanlity = quanlity;
	}

	public Coffee(){
		
	}
}

JAXB Annotation說明:
@XmlType,將Java類或枚舉類型映射到XML模式類型
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或屬性的序列化。FIELD表示JAXB將自動綁定Java類中的每個非靜態的(static)、非瞬態的(由@XmlTransient標註)字段到XML。其他值還有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 綁定類中屬性和字段的排序。
@XmlJavaTypeAdapter,使用定製的適配器(即擴展抽象類XmlAdapter並覆蓋marshal()和unmarshal()方法),以序列化Java類爲XML。
@XmlElementWrapper ,對於數組或集合(即包含多個元素的成員變量),生成一個包裝該數組或集合的XML元素(稱爲包裝器)。
@XmlRootElement,將Java類或枚舉類型映射到XML元素。
@XmlElement,將Java類的一個屬性映射到與屬性同名的一個XML元素。
@XmlAttribute,將Java類的一個屬性映射到與屬性同名的一個XML屬性。

##創建Controller類
在com.controller中創建一個Controller類,XMlController.java

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mybatis.model.Coffee;

@Controller
@RequestMapping("/coffee")
public class Xmlcontroller {

	@RequestMapping("/xml")
	public @ResponseBody Coffee getCoffeeinXML(@RequestParam String name){
		Coffee coffee = new Coffee(name,100);
		return coffee;
	}
}

##測試連接
http://localhost:8080/CMP/coffee/xml.do?name=zhang
這裏寫圖片描述

##其他方法說明

  • 在spring的配置中啓用mvc:annotation-driven註解
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
        
	<mvc:annotation-driven />

	<!-- 自動掃描controller包下的所有類,如果@Controller注入爲bean -->
	<context:component-scan base-package="com.controller" />
</beans>
  • 添加spring-oxm.jar依賴,並用以下的MarshallingView處理轉換,使用這種方法,你可以不用在方法中使用@ResponseBody註解
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
	<bean id="xmlViewer" 
		class="org.springframework.web.servlet.view.xml.MarshallingView">
		<constructor-arg>
		  <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
			<property name="classesToBeBound">
				<list>
					<value>com.mybatis.model.Coffee</value>
				</list>
			</property>
		  </bean>
		</constructor-arg>
	</bean>

項目推薦



DC3是基於Spring Cloud的開源可分佈式物聯網(IOT)平臺,用於快速開發、部署物聯設備接入項目,是一整套物聯繫統解決方案。

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