1.pom.xml中添加依賴
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.7</version> </dependency>
2.創建xmlUtil類,並對XStream配置
2.1 解決雙下划線:XStream把對象中的屬性如person_name轉成xml格式時會出現<person__name>,這種雙下划線
此時用這種方式可以將雙下划線代替成單下划線
//解決雙下划線 public static final XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("-_", "_");
2.2 編碼格式:
// 編碼格式 private static final String ENCODING = "UTF-8";
2.3 使用dom解析方式
// dom解析驅動 private static final DomDriver fixDriver = new DomDriver(ENCODING, nameCoder);
2.4 通用解析器,把配置都放到XStream對象中
// 通用解析器 public static final XStream XSTREAM = new XStream(fixDriver);
2.5 對象中有日期注意時區處理
//時區 private static final String CHINA_TIME_ZONE = "Asia/Shanghai";
2.6 初始化XStream
static { // 時區處理 TimeZone zone = TimeZone.getTimeZone(CHINA_TIME_ZONE); //獲得時區 XSTREAM.registerConverter(new DateConverter(zone), XStream.PRIORITY_NORMAL); XSTREAM.autodetectAnnotations(true); //開啟序列化的注解形式 XSTREAM.setMode(XStream.NO_REFERENCES);//取消引用,如果沒有這一步,會出現xml引用格式reference }
3. XStream的方法
3.1 報文轉對象
public static Object fromXML(String xml) { Object target = null; XStream xstream = XSTREAM; xstream.processAnnotations(AllCase.class);//開啟此類的解析,否則無法解析 try { target = xstream.fromXML(xml); } catch (Exception e) { e.printStackTrace(); } return target; }
3.2 對象轉報文
public static String toXML(Object obj) { XStream xstream = XSTREAM; String xml= xstream.toXML(obj); return xml; }
3.3 文件流轉對象
public static Object fromXML(InputStream in) { Object target = null; XStream xstream = XSTREAM; xstream.processAnnotations(AllCase.class); try { target = xstream.fromXML(in); System.out.println("輸入成功"); } catch (Exception e) { e.printStackTrace(); } return target; }
3.4對象轉文件流
public static void toXML(Object obj, OutputStream out) { XStream xstream = XSTREAM; xstream.toXML(obj,out); System.out.println("輸出成功"); }