admin管理员组

文章数量:1794759

Spring MVC Controller 返回XML数据

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

##测试连接 localhost:8080/CMP/coffee/xml.do?name=zhang

##其他方法说明

  • 在spring的配置中启用mvc:annotation-driven注解
<beans xmlns="www.springframework/schema/beans" xmlns:context="www.springframework/schema/context" xmlns:mvc="www.springframework/schema/mvc" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation=" www.springframework/schema/beans www.springframework/schema/beans/spring-beans-4.0.xsd www.springframework/schema/context www.springframework/schema/context/spring-context-4.0.xsd www.springframework/schema/mvc www.springframework/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)平台,用于快速开发、部署物联设备接入项目,是一整套物联系统解决方案。

本文标签: 数据MVCspringxmlcontroller