spring mvc實現Restful返回xml格式資料
SpringMVC中整合了JSON、XML的檢視,可以通過這些檢視完成Java物件到XML、JSON的轉換。轉換XML提供了MarshallingView,開發者只需用注入相應的marshaller、和屬性配置,即可自動完成Java的Model物件中的資料到XML的編組。
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
一、 準備工作
1、 本次程式會涉及到Jackson、xStream、Jibx、Jaxb2、castor等技術,如果你對這些技術還不是很瞭解。建議閱讀:http://www.cnblogs.com/hoojo/archive/2011/04/27/2030264.html
這篇文章中涉及到的內容應該對你有不少幫助。
2、 jar包下載
spring各版本jar下載地址:http://ebr.springsource.com/repository/app/library/detail?name=org.springframework.spring
相關的依賴包也可以在這裡找到:http://ebr.springsource.com/repository/app/library
3、 至少需要以下jar包
4、 當前工程的web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<-- 配置Spring核心控制器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<-- 解決工程編碼過濾器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
5、 WEB-INF中的dispatcher.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
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-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<-- 註解探測器 -->
<context:component-scan base-package="com.hoo.controller"/>
<-- 檢視解析器,根據檢視的名稱new ModelAndView(name),在配置檔案查詢對應的bean配置 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"/>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>
</beans>
啟動後,可以看到index.jsp 沒有出現異常或錯誤。那麼當前SpringMVC的配置就成功了。
二、 利用Jaxb2編組XML
1、 Jaxb2可以完成XML和Java的相互轉換,在WebService中用得較多。前面也介紹過Jaxb2 的用法。
線上博文:
For cnblogs:http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html
For csdn:http://blog.csdn.net/IBM_hoojo/archive/2011/04/26/6363491.aspx
2、 首先在dispatcher.xml中配置Jaxb2的marshaller的檢視,配置如下:
<-- xml檢視,Jaxb2Marshaller,需要配置物件和物件新增Annotation xml註解,不需要新增額外的jar包 -->
<bean name="jaxb2MarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<array>
<value>com.hoo.entity.User</value>
<value>com.hoo.entity.AccountBean</value>
<value>com.hoo.entity.MapBean</value>
<value>com.hoo.entity.ListBean</value>
</array>
</property>
</bean>
</constructor-arg>
</bean>
Jaxb2的jar在jdk中已經包含,所以不需要新增額外的jar包。詳細資訊你可以參考1中的博文。上面的jaxb2MarshallingView檢視的class是MarshallingView,它有一個構造器需要傳遞一個Marshaller。Marshaller主要完成編組,即將Java物件轉換成XML的這麼一個東東。我們在這個構造器中注入了Jaxb2Marshaller這個類,這個bean有一個classesToBeBound屬性,這個屬性是一個陣列。需要將即將轉換成XML的Java物件配置在這裡。而且這些物件需要進行Annotation註解。
3、 建立Jaxb2MarshallingViewController,完成Java物件到XML的轉換
單個JavaBean的轉換,程式碼如下:
package com.hoo.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.hoo.entity.AccountBean;
import com.hoo.entity.Brithday;
import com.hoo.entity.DifferBean;
import com.hoo.entity.ListBean;
import com.hoo.entity.MoreBean;
import com.hoo.entity.User;
/**
* <b>function:</b>Jaxb2MarshallingView 檢視,利用Jaxb2進行Java物件到XML的轉換技術
* @author hoojo
* @createDate 2011-4-27 下午03:20:23
* @file Jaxb2MarshallingViewController.java
* @package com.hoo.controller
* @project SpringMVC4View
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
@Controller
@RequestMapping("/jaxb2/view")
public class Jaxb2MarshallingViewController {
/*
* MarshallingView Jaxb2Marshaller 需要配置轉換成xml的java物件的Annotation
*/
@RequestMapping("/doXMLJaxb2")
public ModelAndView doXMLJaxb2View() {
System.out.println("#################ViewController doXMLJaxb2View##################");
ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
AccountBean bean = new AccountBean();
bean.setAddress("address");
bean.setEmail("email");
bean.setId(1);
bean.setName("haha");
Brithday day = new Brithday();
day.setBrithday("2010-11-22");
bean.setBrithday(day);
mav.addObject(bean);
return mav;
}
}
上面的程式碼的ModelAndView配置了jaxb2MarshallingView這個檢視,就表示結果集會通過這個檢視進行編組後顯示。上面需要轉換的AccountBean和Birthday物件,這些物件需要配置annotation,前面已經講到annotation對JavaBean轉換XML的作用。我們來看看AccountBean物件程式碼:
package com.hoo.entity;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "account")
public class AccountBean {
private int id;
private String name;
private String email;
private String address;
private Brithday brithday;
@XmlElement
public Brithday getBrithday() {
return brithday;
}
public void setBrithday(Brithday brithday) {
this.brithday = brithday;
}
@XmlElement
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@XmlElement
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return this.name + "#" + this.id + "#" + this.address + "#" + this.brithday + "#" + this.email;
}
}
在getter方法都有部分註解,如果你想了解更多的jaxb2的相關技術,參考:http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html
Brithday
package com.hoo.entity;
public class Brithday {
private String brithday;
public Brithday() {}
public Brithday(String brithday) {
this.brithday = brithday;
}
public String getBrithday() {
return brithday;
}
public void setBrithday(String brithday) {
this.brithday = brithday;
}
}
Brithday是AccountBean中的一個屬性,在AccountBean中已經註解過。這裡就不需要進行註解配置。
通過瀏覽器請求:http://localhost:8080/SpringMVC4View/jaxb2/view/doXMLJaxb2.do
結果如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<account><address>address</address><brithday><brithday>2010-11-22</brithday></brithday>
<email>email</email><id>1</id><name>haha</name></account>
4、 轉換帶List屬性的JavaEntity
/**
* <b>function:</b>轉換帶有List屬性的JavaBean
* @author hoojo
* @createDate 2011-4-27 下午05:32:22
* @return
*/
@RequestMapping("/doListXMLJaxb2")
public ModelAndView doListXMLJaxb2View() {
System.out.println("#################ViewController doListXMLJaxb2View##################");
ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
List<Object> beans = new ArrayList<Object>();
for (int i = 0; i < 3; i++) {
AccountBean bean = new AccountBean();
bean.setAddress("address#" + i);
bean.setEmail("email" + i + "@12" + i + ".com");
bean.setId(1 + i);
bean.setName("haha#" + i);
Brithday day = new Brithday();
day.setBrithday("2010-11-2" + i);
bean.setBrithday(day);
beans.add(bean);
User user = new User();
user.setAddress("china GuangZhou# " + i);
user.setAge(23 + i);
user.setBrithday(new Date());
user.setName("jack#" + i);
user.setSex(Boolean.parseBoolean(i + ""));
beans.add(user);
}
ListBean list = new ListBean();
list.setList(beans);
mav.addObject(list);
return mav;
}
ListBean註解過的程式碼
package com.hoo.entity;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
@SuppressWarnings("unchecked")
@XmlRootElement
public class ListBean {
private String name;
private List list;
@XmlElements({
@XmlElement(name = "user", type = User.class),
@XmlElement(name = "account", type = AccountBean.class),
})
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
通過上面的註解可以看出List中只能儲存User、AccountBean物件,關於User物件的程式碼和AccountBean物件的是一樣的,只是類名不同而已。讀者可以自己新增。在WebBrowser中請求:http://localhost:8080/SpringMVC4View/jaxb2/view/doListXMLJaxb2.do
結果如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<listBean>
<account><address>address#0</address><brithday><brithday>2010-11-20</brithday></brithday>
<email>email0@120.com</email><id>1</id><name>haha#0</name></account>
<user><address>china GuangZhou# 0</address><age>23</age>
<brithday>2011-04-27T17:02:38.028+08:00</brithday><name>jack#0</name><sex>false</sex></user>
<account><address>address#1</address><brithday><brithday>2010-11-21</brithday></brithday>
<email>email1@121.com</email><id>2</id><name>haha#1</name></account>
<user><address>china GuangZhou# 1</address><age>24</age>
<brithday>2011-04-27T17:02:38.028+08:00</brithday><name>jack#1</name><sex>false</sex></user>
<account><address>address#2</address><brithday><brithday>2010-11-22</brithday></brithday>
<email>email2@122.com</email><id>3</id><name>haha#2</name></account>
<user><address>china GuangZhou# 2</address><age>25</age>
<brithday>2011-04-27T17:02:38.028+08:00</brithday><name>jack#2</name><sex>false</sex></user>
</listBean>
5、 轉換帶有Map屬性的JavaBean,Jaxb2轉換Map有點複雜,先看看程式碼:
/**
* <b>function:</b>轉換帶有Map屬性的JavaBean
* @author hoojo
* @createDate 2011-4-27 下午05:32:42
* @return
*/
@RequestMapping("/doMapXMLJaxb2")
public ModelAndView doMapXMLJaxb2View() {
System.out.println("#################ViewController doMapXMLJaxb2View##################");
ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
MapBean mapBean = new MapBean();
HashMap<String, AccountBean> map = new HashMap<String, AccountBean>();
AccountBean bean = new AccountBean();
bean.setAddress("北京");
bean.setEmail("email");
bean.setId(1);
bean.setName("jack");
Brithday day = new Brithday();
day.setBrithday("2010-11-22");
bean.setBrithday(day);
map.put("NO1", bean);
bean = new AccountBean();
bean.setAddress("china");
bean.setEmail("tom@125.com");
bean.setId(2);
bean.setName("tom");
day = new Brithday("2011-11-22");
bean.setBrithday(day);
map.put("NO2", bean);
mapBean.setMap(map);
mav.addObject(mapBean);
return mav;
}
首先看看MapBean的程式碼,程式碼很簡單就一個Map的屬性。
package com.hoo.entity;
import java.util.HashMap;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.hoo.util.MapAdapter;
@XmlRootElement
public class MapBean {
private HashMap<String, AccountBean> map;
@XmlJavaTypeAdapter(MapAdapter.class)
public HashMap<String, AccountBean> getMap() {
return map;
}
public void setMap(HashMap<String, AccountBean> map) {
this.map = map;
}
}
上面的程式碼的getMap方法設定了XmlJavaTypeAdapter這個註解,註解裡面的MapAdapter是我們自己實現的,而且還要構建一個MapElements陣列元素。主要是繼承XmlAdapter重寫裡面的幾個方法完成的。
MapAdapter程式碼
package com.hoo.util;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import com.hoo.entity.AccountBean;
/**
* <b>function:</b>AccountBean 編組、解組的XmlAdapter
* @author hoojo
* @createDate 2011-4-25 下午05:03:18
* @file MyAdetper.java
* @package com.hoo.util
* @project WebHttpUtils
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class MapAdapter extends XmlAdapter<MapElements[], Map<String, AccountBean>> {
public MapElements[] marshal(Map<String, AccountBean> arg0) throws Exception {
MapElements[] mapElements = new MapElements[arg0.size()];
int i = 0;
for (Map.Entry<String, AccountBean> entry : arg0.entrySet())
mapElements[i++] = new MapElements(entry.getKey(), entry.getValue());
return mapElements;
}
public Map<String, AccountBean> unmarshal(MapElements[] arg0) throws Exception {
Map<String, AccountBean> r = new HashMap<String, AccountBean>();
for (MapElements mapelement : arg0)
r.put(mapelement.key, mapelement.value);
return r;
}
}
MapElements程式碼
package com.hoo.util;
import javax.xml.bind.annotation.XmlElement;
import com.hoo.entity.AccountBean;
/**
* <b>function:</b> MapElements
* @author hoojo
* @createDate 2011-4-25 下午05:04:04
* @file MyElements.java
* @package com.hoo.util
* @project WebHttpUtils
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class MapElements {
@XmlElement
public String key;
@XmlElement
public AccountBean value;
@SuppressWarnings("unused")
private MapElements() {
} // Required by JAXB
public MapElements(String key, AccountBean value) {
this.key = key;
this.value = value;
}
}
在瀏覽器中請求:http://localhost:8080/SpringMVC4View/jaxb2/view/doMapXMLJaxb2.do
結果如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mapBean><map><item><key>NO2</key><value><address>china</address>
<brithday><brithday>2011-11-22</brithday></brithday>
<email>tom@125.com</email><id>2</id><name>tom</name></value></item>
<item><key>NO1</key><value><address>北京</address><brithday><brithday>2010-11-22</brithday></brithday>
<email>email</email><id>1</id><name>jack</name></value></item></map>
</mapBean>
總結,如果你想將一些Java的基本型別轉換成XML。那麼你得建立一個帶getter、setter方法的JavaBean。然後在Bean的getter方法進行相應的Annotation註解即可完成轉換。
三、 利用xStream轉換XML
1、 xStream可以輕易的將Java物件轉換成XML、JSON,Spring整合利用xStream轉換xml。需要新增xStream相關的xstream-1.3.1.jar包。 如果你對xStream不上很瞭解,你可以先閱讀這篇文章:
For csblogs:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html
For csdn:http://blog.csdn.net/IBM_hoojo/archive/2011/04/22/6342386.aspx
2、 然後在dispatcher.xml中新增如下配置
<-- xml檢視,XStreamMarshaller,可以轉換任何形式的java物件,需要新增xStream jar包 -->
<bean name="xStreamMarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<-- 啟用annotation -->
<property name="autodetectAnnotations" value="true"/>
<-- 類名別名 -->
<property name="aliases">
<map>
<-- Account這個類的別名就變成了myBeans,那麼轉換後的xml中就是myBeans -->
<entry key="myBeans" value="com.hoo.entity.Account"/>
</map>
</property>
<-- 基本屬性別名 -->
<property name="fieldAliases">
<map>
<-- Account中的brithday這個屬性 -->
<entry key="com.hoo.entity.Account.brithday" value="生日"/>
</map>
</property>
</bean>
</property>
</bean>
上次配置的引數有註釋描述,還要沒有配置的引數。如:annotatedClass、annotatedClasses是當沒有配置啟用annotation的時候,可以用這2個屬性進行配置你指定的class啟用annotation註解。streamDriver是配置驅動用的,預設可以不要驅動,你可以配置DomDriver、JSON相關的驅動。encoding是設定編碼,關於XStreamMarshaller還要更多的引數配置和上面xStream 的博文中講解的一樣使用,只是通過配置,而博文中是直接在程式碼中寫的。當然也可以通過annotation進行註解哦;如果你想了解更多xStream的用法,請你仔細閱讀:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html
3、 普通JavaBean轉換XML
package com.hoo.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.hoo.entity.Account;
import com.hoo.entity.AccountArray;
import com.hoo.entity.AccountBean;
import com.hoo.entity.Brithday;
import com.hoo.entity.DifferBean;
import com.hoo.entity.ListBean;
import com.hoo.entity.MapBean;
import com.hoo.entity.MoreBean;
import com.hoo.entity.User;
/**
* <b>function:</b>Jaxb2MarshallingView 檢視,利用Jaxb2進行Java物件到XML的轉換技術
* @author hoojo
* @createDate 2011-4-27 下午03:20:23
* @file Jaxb2MarshallingViewController.java
* @package com.hoo.controller
* @project SpringMVC4View
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
@Controller
@RequestMapping("/jaxb2/view")
public class Jaxb2MarshallingViewController {
/*
* MarshallingView Jaxb2Marshaller 需要配置轉換成xml的java物件的Annotation
*/
@RequestMapping("/doXMLJaxb2")
public ModelAndView doXMLJaxb2View() {
System.out.println("#################ViewController doXMLJaxb2View##################");
ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
AccountBean bean = new AccountBean();
bean.setAddress("address");
bean.setEmail("email");
bean.setId(1);
bean.setName("haha");
Brithday day = new Brithday();
day.setBrithday("2010-11-22");
bean.setBrithday(day);
mav.addObject(bean);
return mav;
}
}
AccountBean上面的程式碼已經給出,這裡就不重複了。值得說明的是xStream在ModelAndView中,直接用addObject方法新增時,有時候出現一些不是我們轉換的物件的資訊,一般是BindingResult的xml資訊。解決辦法就是設定addObject的key。Key設定為BindingResult.MODEL_KEY_PREFIX這樣就可以了,程式碼上面已經給出。
在瀏覽器中請求:http://localhost:8080/SpringMVC4View/xStream/view/doXMLXStream.do
結果如下:
<com.hoo.entity.AccountBean><id>1</id><name>haha</name><email>email</email><address>北京</address>
<brithday><brithday>2010-11-22</brithday></brithday></com.hoo.entity.AccountBean>
4、 轉換物件陣列
程式碼如下:
/**
* <b>function:</b>轉換物件陣列
* @author hoojo
* @createDate 2011-4-27 下午06:19:40
* @return
*/
@RequestMapping("/doMoreXMLXStream")
public ModelAndView doMoreXMLXStreamView() {
System.out.println("#################ViewController doMoreXMLXStreamView##################");
ModelAndView mav = new ModelAndView("xStreamMarshallingView");
Account[] accs = new Account[2];
Account bean = new Account();
bean.setAddress("北京");
bean.setEmail("email");
bean.setId(1);
bean.setName("haha");
Brithday day = new Brithday();
day.setBrithday("2010-11-22");
bean.setBrithday(day);
accs[0] = bean;
bean = new Account();
bean.setAddress("上海");
bean.setEmail("email");
bean.setId(1);
bean.setName("haha");
day = new Brithday();
day.setBrithday("2010-11-22");
bean.setBrithday(day);
accs[1] = bean;
mav.addObject(accs);
return mav;
}
在WebBrowser中請求http://localhost:8080/SpringMVC4View/xStream/view/doMoreXMLXStream.do
結果如下:
<myBeans-array><myBeans><id>1</id><name>haha</name><email>email</email>
<address>北京</address><生日><brithday>2010-11-22</brithday></生日></myBeans>
<myBeans><id>1</id><name>haha</name><email>email</email><address>上海</address>
<生日><brithday>2010-11-22</brithday></生日></myBeans></myBeans-array>
結果中的myBeans、生日就是在dispatcher配置檔案中重新命名的物件屬性名稱。
5、 轉換Map集合
/**
* <b>function:</b>轉換Map物件
* @author hoojo
* @createDate 2011-4-27 下午06:19:48
* @return
*/
@RequestMapping("/doDifferXMLXStream")
public ModelAndView doDifferXMLXStreamView() {
System.out.println("#################ViewController doDifferXMLXStreamView##################");
ModelAndView mav = new ModelAndView("xStreamMarshallingView");
Account bean = new Account();
bean.setAddress("廣東");
bean.setEmail("email");
bean.setId(1);
bean.setName("haha");
Brithday day = new Brithday();
day.setBrithday("2010-11-22");
bean.setBrithday(day);
User user = new User();
user.setAddress("china GuangZhou");
user.setAge(23);
user.setBrithday(new Date());
user.setName("jack");
user.setSex(true);
Map<String, Object> map = new HashMap<String, Object>();
map.put("bean", bean);
map.put("user", user);
mav.addObject(map);
return mav;
}
在WebBrowser中請求http://localhost:8080/SpringMVC4View/xStream/view/doDifferXMLXStream.do
結果如下:
<map><entry>
<string>bean</string><myBeans><id>1</id><name>haha</name><email>email</email>
<address>廣東</address><生日><brithday>2010-11-22</brithday></生日></myBeans>
</entry><entry><string>user</string><com.hoo.entity.User><name>jack</name><age>23</age><sex>true</sex>
<address>china GuangZhou</address><brithday>2011-04-27 19:02:13.747 CST</brithday></com.hoo.entity.User>
</entry></map>
6、 轉換List集合
/**
* <b>function:</b>轉換List物件
* @author hoojo
* @createDate 2011-4-27 下午06:20:02
* @return
*/
@RequestMapping("/doListXMLXStream")
public ModelAndView doListXMLXStreamView() {
System.out.println("#################ViewController doListXMLXStreamView##################");
ModelAndView mav = new ModelAndView("xStreamMarshallingView");
List<Object> beans = new ArrayList<Object>();
for (int i = 0; i < 3; i++) {
Account bean = new Account();
bean.setAddress("北京#" + i);
bean.setEmail("email" + i + "@12" + i + ".com");
bean.setId(1 + i);
bean.setName("haha#" + i);
Brithday day = new Brithday();
day.setBrithday("2010-11-2" + i);
bean.setBrithday(day);
beans.add(bean);
User user = new User();
user.setAddress("china GuangZhou 廣州# " + i);
user.setAge(23 + i);
user.setBrithday(new Date());
user.setName("jack#" + i);
user.setSex(Boolean.parseBoolean(i + ""));
beans.add(user);
}
mav.addObject(beans);
return mav;
}
在WebBrowser中請求http://localhost:8080/SpringMVC4View/xStream/view/doListXMLXStream.do
結果如下:
<list>
<myBeans><id>1</id><name>haha#0</name><email>email0@120.com</email><address>北京#0</address><生日>
<brithday>2010-11-20</brithday></生日></myBeans>
<com.hoo.entity.User><name>jack#0</name><age>23</age><sex>false</sex><address>china GuangZhou 廣州# 0</address>
<brithday>2011-04-27 19:08:40.106 CST</brithday></com.hoo.entity.User>
<myBeans><id>2</id><name>haha#1</name><email>email1@121.com</email><address>北京#1</address><生日>
<brithday>2010-11-21</brithday></生日></myBeans>
<com.hoo.entity.User><name>jack#1</name><age>24</age><sex>false</sex><address>china GuangZhou 廣州# 1</address>
<brithday>2011-04-27 19:08:40.106 CST</brithday></com.hoo.entity.User>
<myBeans><id>3</id><name>haha#2</name><email>email2@122.com</email><address>北京#2</address><生日>
<brithday>2010-11-22</brithday></生日></myBeans>
<com.hoo.entity.User><name>jack#2</name><age>25</age><sex>false</sex><address>china GuangZhou 廣州# 2</address>
<brithday>2011-04-27 19:08:40.106 CST</brithday></com.hoo.entity.User></list>
總結,xStream相對jaxb2要簡單些。而且相對比較靈活,可以輕易的轉換Java普通型別。
下次會介紹castor轉換XML、jibx轉換XML、Jackson轉換JSON 以及自定義Jsonlib檢視轉換Json。
http://www.dexcoder.com/selfly/article/3973
相關文章
- 每天用SpringBoot,還不懂RESTful API返回統一資料格式是怎麼實現的?Spring BootRESTAPI
- Spring學習手冊 1:Spring MVC 返回JSON資料SpringMVCJSON
- Spring Security專案Spring MVC開發RESTful API(二)SpringMVCRESTAPI
- Django實現統一包裝介面返回值資料格式Django
- Spring MVC 中使用 RESTFul 程式設計風格SpringMVCREST程式設計
- Spring MVC xml繫結pojo造成的XXESpringMVCXMLPOJO
- Spring MVC實現過程淺析SpringMVC
- Spring mvc檔案上傳實現SpringMVC
- NPM酷庫051:xml2js,解析XML格式資料NPMXMLJS
- Spring MVC 中檢視的實現原理,在Spring MVC 中實現重定向和轉發,以及訪問靜態資源SpringMVC
- 使用GraphQL對資料模型和訊息格式實現類似XML的DTD驗證模型XML
- 使用Spring Boot RESTful Web流式資料 | TechshardSpring BootRESTWeb
- Spring MVC 檔案上傳、Restful、表單校驗框架SpringMVCREST框架
- 手寫Spring MVC框架(一) 實現簡易版mvc框架SpringMVC框架
- Spring AOP基於xml的方式實現SpringXML
- 【Spring】內嵌Tomcat&去Xml&除錯MvcSpringTomcatXML除錯MVC
- 一個介面優雅的實現 Spring Cloud OAuth2 自定義token返回格式SpringCloudOAuth
- Laravel 集合 where 返回的資料格式問題Laravel
- 探索多種資料格式:JSON、YAML、XML、CSV等資料格式詳解與比較JSONYAMLXML
- 只需一步,在Spring Boot中統一Restful API返回值格式與統一處理異常Spring BootRESTAPI
- Spring MVC3返回JSON資料中文亂碼問題解決(轉)SpringMVCJSON
- 【mybatis xml】資料層框架應用--Mybatis 基於XML對映檔案實現資料的CRUDMyBatisXML框架
- spring mvc 的jpa JpaRepository資料層訪問SpringMVC
- Python資料處理(一):處理 JSON、XML、CSV 三種格式資料PythonJSONXML
- 使用Docker實現Spring Boot Restful Web服務案例原始碼DockerSpring BootRESTWeb原始碼
- nodejs實現restful APINodeJSRESTAPI
- SpringBoot Restful 介面實現Spring BootREST
- 蝦皮商品詳情介面返回資料的json格式JSON
- 線上教育專案(六)----統一返回資料格式
- Spring AOP 在 XML檔案中實現 AspectJ 攔截SpringXML
- ABAP和XML資料格式互相轉換的兩種方式XML
- golang 簡單實現介面資料格式化Golang
- 基於json資料格式實現的簡單資料庫——jsonDBJSON資料庫
- hrsc2016資料集xml格式轉換為yolo格式,附下載連結XMLYOLO
- 如何設計API介面,實現統一格式返回?API
- 如何設計 API 介面,實現統一格式返回?API
- Java實現Web操作介面以及返回資料的翻譯JavaWeb
- 精盡Spring MVC原始碼分析 - 尋找遺失的 web.xmlSpringMVC原始碼WebXML
- Laravel 中 dingo API tranformer 返回自定義分頁格式資料LaravelGoAPIORM