
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
需求:
1、springmvc返回xml;
技术及环境:
Spring 4.3.1.RELEASE
JDK 1.8
IDEA 15.0.6
Maven 3
实现:
spirngxml的配置主要如下:
添加项目依赖:
复制代码
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.1.RELEASE</version></dependency><!--#/artifact/org.springframework/spring-beans--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.1.RELEASE</version></dependency><!--#/artifact/org.springframework/spring-context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.1.RELEASE</version></dependency><!--#/artifact/org.springframework/spring-web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.1.RELEASE</version></dependency><!--#/artifact/org.springframework/spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.1.RELEASE</version></dependency>
复制代码
实体类JavaBean
一个简单的JavaBean,添加了JAXB注解,spring将会根据请求判断转换成xml。JAXB不需要添加额外的依赖库,已经包含在jdk中。
BaseXmlResult的作用是作为返回的标志和附加消息对象(如:操作成功!操作失败等)。抽取出来,不用每个返回对象都写code和message,只需要继承即可。XmlActionResult为具体的要返回的信息的对象。前台页面需要解析的数据。该对象中Data为泛型对象,返回时,可根据实际情况,设置Person.class|Man.class|Woman.class对象,若有其他对象,只需对注解进行调整即可,方便维护。
复制代码
publicclassBaseXmlResult {protectedString code;protectedString message;publicString getCode() {returncode; }publicvoidsetCode(String code) {this.code =code; }publicString getMessage() {returnmessage; }publicvoidsetMessage(String message) {this.message =message; } }
复制代码
复制代码
@XmlRootElement(name = "xml") @XmlAccessorType(XmlAccessType.NONE)publicclassXmlActionResult<T>extendsBaseXmlResult{ @XmlElements({ @XmlElement(name="Person",type = Person.class), @XmlElement(name="Man",type = Man.class), @XmlElement(name="Woman",type = Woman.class) })privateT data;publicString getCode() {returncode; }publicvoidsetCode(String code) {this.code =code; }publicString getMessage() {returnmessage; }publicvoidsetMessage(String message) {this.message =message; }publicT getData() {returndata; }publicvoidsetData(T data) {this.data =data; } }
复制代码
复制代码
@XmlRootElement @XmlAccessorType(XmlAccessType.NONE)publicclassPerson { @XmlElementprivateString name; @XmlElementprivateInteger sex; @XmlElementprivateInteger age;privateDate birthday;publicPerson(String name, Integer sex, Integer age) {this.name =name;this.sex =sex;this.age =age; }publicPerson() { }publicString getName() {returnname; }publicvoidsetName(String name) {this.name =name; }publicInteger getSex() {returnsex; }publicvoidsetSex(Integer sex) {this.sex =sex; }publicInteger getAge() {returnage; }publicvoidsetAge(Integer age) {this.age =age; } @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//json格式返回的日期格式化注解,日期格式json转换默认是long类型的,如:144101141111111,格式化成yyyy-MM-dd HH:mm:ss格式publicDate getBirthday() {returnbirthday; }publicvoidsetBirthday(Date birthday) {this.birthday =birthday; } }
复制代码
Controller类
复制代码
@Controller @RequestMapping("/mvc")publicclassHelloController { @RequestMapping("/helloXmlPerson/{name}") @ResponseBodypublicXmlActionResult helloXmlPerson(@PathVariable("name") String name){ XmlActionResult<Person> actionResult =newXmlActionResult<Person>(); actionResult.setCode("123"); actionResult.setMessage(name); Person person=newPerson("xxxxx",1,32); actionResult.setData(person);returnactionResult; } }
复制代码
spring配置文件中新增
<mvc:annotation-driven/>
用于启用@ResponseBody注解。
访问对应得路径后返回:
<xml>
<code>123</code>
<message>nihao</message>
<Person>
<name>xxxxx</name>
<sex>1</sex>
<age>32</age>
</Person>
</xml>