需求:
1、springmvc返回xml;
技術及環境:
實現:
spirngxml的配置主要如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.1.RELEASE</version> </dependency>
一個簡單的JavaBean,添加了JAXB 注解,spring將會根據請求判斷轉換成xml。JAXB不需要添加額外的依賴庫,已經包含在jdk中。
BaseXmlResult 的作用是作為返回的標志和附加消息對象(如:操作成功!操作失敗等)。抽取出來,不用每個返回對象都寫code和message,只需要繼承即可。
XmlActionResult 為具體的要返回的信息的對象。前台頁面需要解析的數據。該對象中Data為泛型對象,返回時,可根據實際情況,設置Person.class|Man.class|Woman.class對象,若有其他對象,只需對注解進行調整即可,方便維護。
public class BaseXmlResult { protected String code; protected String message; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
@XmlRootElement(name = "xml") @XmlAccessorType(XmlAccessType.NONE) public class XmlActionResult<T> extends BaseXmlResult{ @XmlElements({ @XmlElement(name="Person",type = Person.class), @XmlElement(name="Man",type = Man.class), @XmlElement(name="Woman",type = Woman.class) }) private T data; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
@XmlRootElement @XmlAccessorType(XmlAccessType.NONE) public class Person { @XmlElement private String name; @XmlElement private Integer sex; @XmlElement private Integer age; private Date birthday; public Person(String name, Integer sex, Integer age) { this.name = name; this.sex = sex; this.age = age; } public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(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格式 public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
Controller類
@Controller @RequestMapping("/mvc") public class HelloController { @RequestMapping("/helloXmlPerson/{name}") @ResponseBody public XmlActionResult helloXmlPerson(@PathVariable("name") String name){ XmlActionResult<Person> actionResult = new XmlActionResult<Person>(); actionResult.setCode("123"); actionResult.setMessage(name); Person person = new Person("xxxxx",1,32); actionResult.setData(person); return actionResult; } }
spring配置文件中新增
<mvc:annotation-driven/>
用於啟用@ResponseBody注解。
訪問對應得路徑後返回:
<xml> <code>123</code> <message>nihao</message> <Person> <name>xxxxx</name> <sex>1</sex> <age>32</age> </Person> </xml>