日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xstream不映射字段_这本XStream学习手册,真的不来看看?

發布時間:2023/12/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xstream不映射字段_这本XStream学习手册,真的不来看看? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

1、XStream官網

http://x-stream.github.io

2、XStream是什么

XStream是一個簡單的基于Java的類庫,用來將Java對象序列化成XML(JSON)或反序列化為對象(即:可以輕易的將Java對象和XML文檔相互轉換)

3、XSteam能干什么

XStream在運行時使用Java反射機制對要進行序列化的對象樹的結構進行探索,并不需要對對象作出修改。XStream可以序列化內部字段,包括私private和final字段,并且支持非公開類以及內部類。

在缺省情況下,XStream不需要配置映射關系,對象和字段將映射為同名XML元素。但是當對象和字段名與XML中的元素名不同時,XStream支持指定別名。XStream支持以方法調用的方式,或是Java 標注的方式指定別名。

XStream在進行數據類型轉換時,使用系統缺省的類型轉換器。同時,也支持用戶自定義的類型轉換器。

4、XStream特點**使用方便 **- XStream的API提供了一個高層次外觀,以簡化常用的用例

**無需創建映射 **- XStream的API提供了默認的映射大部分對象序列化

性能 - XStream快速和低內存占用,適合于大對象圖或系統

干凈的XML - XStream創建一個干凈和緊湊XML結果,這很容易閱讀

不需要修改對象 - XStream可序列化的內部字段,如private和final字段,支持非公開類和內部類。默認構造函數不是強制性的要求

完整對象圖支持 - XStream允許保持在對象模型中遇到的重復引用,并支持循環引用

可自定義的轉換策略 - 定制策略可以允許特定類型的定制被表示為XML的注冊

安全框架 - XStream提供了一個公平控制有關解組的類型,以防止操縱輸入安全問題

**錯誤消息 **- 出現異常是由于格式不正確的XML時,XStream拋出一個統一的例外,提供了詳細的診斷,以解決這個問題

另一種輸出格式 - XStream支持其它的輸出格式,如JSON

5、XStream常見的用途

傳輸、持久化、配置、單元測試這里是我的個人專欄《Java 進階集中營》,里面收錄有很多優秀的java技術內容和工作分享,大家可以關注下,有優秀的技術內容也歡迎大家分享到我的專欄。JAVA 進階集中營?zhuanlan.zhihu.com

二、XStream入門

1、添加XSteam依賴

com.thoughtworks.xstream

xstream

1.4.12

org.codehaus.jettison

jettison

1.4.1

2、XStream基本使用

package io.github.xstream.test01;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

public class XStreamTest01 {

public static void main(String[] args) {

Student student = new Student("張三", 20);

XStream xStream = new XStream();//需要XPP3庫

//XStream xStream = new XStream(new DomDriver());//不需要XPP3庫

//XStream xStream = new XStream(new StaxDriver());//不需要XPP3庫開始使用Java 6

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

//XML反序列化

student = (Student) xStream.fromXML(xml);

System.out.println(student);

?

xStream = new XStream(new JettisonMappedXmlDriver());

xStream.setMode(XStream.NO_REFERENCES);

//Json序列化

String json = xStream.toXML(student);

System.out.println(json);

//Json反序列

student = (Student) xStream.fromXML(json);

System.out.println(student);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String name;

private int age;

}

3、程序運行結果

張三

20

Security framework of XStream not initialized, XStream is probably vulnerable.

Student(name=張三, age=20)

{"io.github.xstream.test01.Student":{"name":"張三","age":20}}

Student(name=張三, age=20)

Security framework of XStream not initialized, XStream is probably vulnerable.

注意:文中使用到的Lombok注解,Lombok依賴自行添加;XStream序列化XML時需要引用的jar包:xstream-[version].jar、xpp3-[version].jar、xmlpull-[version].jar,當引入xstream依賴后會自動依賴xpp3、xmlpull依賴。XStream序列化JSON需要引用的jar包:jettison-[version].jar。

使用XStream序列化時,對JavaBean沒有任何限制。JavaBean的字段可以是私有的,也可以沒有getter或setter方法,還可以沒有默認的構造函數。

XStream序列化XML時可以允許用戶使用不同的XML解析器,用戶可以使用一個標準的JAXP DOM解析器或自Java 6集成STAX解析器。這樣用戶就不需要依賴xpp3-[version].jar。

三、XStream混疊****

1、混疊是一種技術來定制生成XML或者使用XStream特定的格式化XML。假設,一個下面的XML格式是用于序列化/反序列化Student對象。

小米

小米手機的描述

蘋果

蘋果手機的描述

2、根椐上面的XML格式,我們創建實體類

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

3、執行代碼

package io.github.xstream.test02;

?

import com.thoughtworks.xstream.XStream;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest02 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones);

?

XStream xStream = new XStream();//需要XPP3庫

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

4、驗證輸出

張三

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

在上面的結果,我們已經看到了Student對象名稱是完全合格的。要替換它作為學生的標簽,按照**四、XStream類混疊**的步驟

另外,在上述結果中可以看出,所需studentName要重命名來命名。要替換它,按照**五、XStream字段混疊**的步驟

在上面的結果,我們可以看到手機標記被添加成為手機列表。替換它,按照**六、XStream隱式集合混疊**的步驟

在上面的結果,我們可以看到這個名字來作為一個子節點,需要將它作為根節點的屬性。替換它,按照**七、XStream屬性混疊**的步驟

四、****XStream****類混疊

1、類混疊是用來創建一個類的XML完全限定名稱的別名。讓我們修改XStreamTest02例子,將下面的代碼添加到XStreamTest02例子里面

xStream.alias("student", Person02.class);

xStream.alias("phone", Phone.class);

2、執行代碼

package io.github.xstream.test02;

?

import com.thoughtworks.xstream.XStream;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest02 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones);

?

XStream xStream = new XStream();//需要XPP3庫

xStream.alias("student", Student.class);

xStream.alias("phone", Phone.class);

?

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

3、執行結果

張三

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

可以看到和分別被修改為了和

五、****XStream****字段混疊

1、字段混疊用于創建以XML字段的別名。讓我們再次修改原來的XStreamTest02例子,將下面的代碼添加到XStreamTest02例子里面

xStream.aliasField("name", Student.class, "studentName");

2、執行代碼

package io.github.xstream.test02;

?

import com.thoughtworks.xstream.XStream;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest02 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones);

?

XStream xStream = new XStream();//需要XPP3庫

xStream.alias("student", Student.class);

xStream.alias("phone", Phone.class);

xStream.aliasField("name", Student.class, "studentName");

?

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

3、執行結果

張三

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

可以看到被修改為了

六、****XStream****隱式集合混疊

1、隱式集合混疊時使用的集合是表示在XML無需顯示根。例如,在我們的例子中,我們需要一個接一個,但不是在根節點來顯示每一個節點。讓我們再次修改原來的XStreamTest02例子,將下面的代碼添加到XStreamTest02例子里面

xStream.addImplicitCollection(Student.class, "phones");

2、執行代碼

package io.github.xstream.test02;

?

import com.thoughtworks.xstream.XStream;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest02 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones);

?

XStream xStream = new XStream();//需要XPP3庫

xStream.alias("student", Student.class);

xStream.alias("phone", Phone.class);

xStream.aliasField("name", Student.class, "studentName");

xStream.addImplicitCollection(Student.class, "phones");

?

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

3、執行結果

張三

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

可以看到被隱藏了

七、****XStream****屬性混疊

1、屬性混疊用于創建一個成員變量作為XML屬性序列化。讓我們再次修改原來的XStreamTest02例子,將下面的代碼添加到XStreamTest02例子里面

xStream.useAttributeFor(Student.class, "studentName");

2、執行代碼

package io.github.xstream.test02;

?

import com.thoughtworks.xstream.XStream;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest02 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones);

?

XStream xStream = new XStream();//需要XPP3庫

xStream.alias("student", Student.class);

xStream.alias("phone", Phone.class);

xStream.aliasField("name", Student.class, "studentName");

xStream.addImplicitCollection(Student.class, "phones");

xStream.useAttributeFor(Student.class, "studentName");

?

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

3、執行結果

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

可以看到被作為了的屬性

八、****XStream****包混疊

1、包混疊用于創建一個類XML的完全限定名稱的別名到一個新的限定名稱。讓我們再次修改原來的XStreamTest02例子,將下面代碼

xStream.alias("student", Student.class);

xStream.alias("phone", Phone.class);

修改為

xStream.aliasPackage("xx.xx.xx.xx", "io.github.xstream.test02");

2、執行代碼

package io.github.xstream.test02;

?

import com.thoughtworks.xstream.XStream;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest02 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones);

?

XStream xStream = new XStream();//需要XPP3庫

// xStream.alias("student", Student.class);

// xStream.alias("phone", Phone.class);

xStream.aliasPackage("xx.xx.xx.xx", "io.github.xstream.test02");

xStream.aliasField("name", Student.class, "studentName");

xStream.addImplicitCollection(Student.class, "phones");

xStream.useAttributeFor(Student.class, "studentName");

?

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

class Student {

private String studentName;

private List phones;

}

?

@AllArgsConstructor

@ToString

class Phone {

private String brand;

private String description;

}

3、執行結果

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

可以看到包名由io.github.xstream.test02替換為了xx.xx.xx.xx

九、****XStream****注解

1、前面的四、五、六、七、八步驟都是通過代碼操作的

//xStream.alias("student", Student.class);

//xStream.alias("phone", Phone.class);

xStream.aliasPackage("xx.xx.xx.xx", "io.github.xstream.test02");

xStream.aliasField("name", Student.class, "studentName");

xStream.addImplicitCollection(Student.class, "phones");

xStream.useAttributeFor(Student.class, "studentName");

2、XStream同時也支持注解,使用注解會變得簡單也會達到相同的效果

package io.github.xstream.test03;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.annotations.*;

import com.thoughtworks.xstream.converters.basic.BooleanConverter;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.ToString;

?

import java.util.ArrayList;

import java.util.List;

?

public class XStreamTest03 {

public static void main(String[] args) {

List phones = new ArrayList<>();

phones.add(new Phone("小米手機", "小米手機的描述"));

phones.add(new Phone("蘋果手機", "蘋果手機的描述"));

Student student = new Student("張三", phones, 20, true);

XStream xStream = new XStream();//需要XPP3庫

//xStream.processAnnotations(new Class[]{Student.class});

xStream.autodetectAnnotations(true);

//XML序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@AllArgsConstructor

@ToString

//別名注解

@XStreamAlias("student")

class Student {

@XStreamAlias("name")

//把字段節點設置成屬性

@XStreamAsAttribute

private String studentName;

//省略集合根節點

@XStreamImplicit

private List phones;

//隱藏字段

@XStreamOmitField

private int age;

//設置轉換器

@XStreamConverter(value = BooleanConverter.class, booleans = {false}, strings = {"男", "女"})

private boolean sex;

}

?

@AllArgsConstructor

@ToString

@XStreamAlias("phone")

class Phone {

private String brand;

private String description;

}

3、使用注解的話,需要XML序列化之前添加如下代碼

xStream.autodetectAnnotations(true);

或者

xStream.processAnnotations(new Class[]{Student.class});

4、執行結果

小米手機

小米手機的描述

蘋果手機

蘋果手機的描述

使用注解我們也可以看到也能達到相同的效果

注意:當使用XStream對象處理一個被注解的類型時,XStream對象也會處理所有與其相關的類型的注解信息,即該類型的父類、父接口、所有子類的注解。

十、****XStream自定義****轉換器

1、XStream自帶的轉換器

XStream內部有許多轉換器,用于JavaBean對象到XML或JSON之間的轉換。這些轉換器的詳細信息網址:http://x-stream.github.io/converters.html

2、使用自定義轉換器

package io.github.xstream.test04;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import lombok.AllArgsConstructor;

import lombok.Getter;

import lombok.Setter;

import lombok.ToString;

?

public class XStreamTest04 {

public static void main(String[] args) {

Student student =new Student("張三",19);

XStream xStream = new XStream();

//注冊轉換器

xStream.registerConverter(new StudentConverter());

//序列化

String xml = xStream.toXML(student);

System.out.println(xml);

//反序列化

student=(Student)xStream.fromXML(xml);

System.out.println(student);

}

}

?

@Getter

@Setter

@ToString

@AllArgsConstructor

class Student {

private String name;

private int age;

}

自定義轉換器

package io.github.xstream.test04;

?

import com.thoughtworks.xstream.converters.Converter;

import com.thoughtworks.xstream.converters.MarshallingContext;

import com.thoughtworks.xstream.converters.UnmarshallingContext;

import com.thoughtworks.xstream.io.HierarchicalStreamReader;

import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

?

public class StudentConverter implements Converter {

//定義轉換器能轉換的JavaBean類型

@Override

public boolean canConvert(Class type) {

return type.equals(Student.class);

}

?

//把對象序列化成XML或JSON

@Override

public void marshal(Object value, HierarchicalStreamWriter writer,

MarshallingContext context) {

Student student = (Student) value;

writer.startNode("姓名");

writer.setValue(student.getName());

writer.endNode();

writer.startNode("年齡");

writer.setValue(student.getAge() + "");

writer.endNode();

writer.startNode("轉換器");

writer.setValue("自定義的轉換器");

writer.endNode();

}

?

//把XML或JSON反序列化成對象

@Override

public Object unmarshal(HierarchicalStreamReader reader,

UnmarshallingContext context) {

Student student = new Student("", -1);

reader.moveDown();

student.setName(reader.getValue());

reader.moveUp();

reader.moveDown();

student.setAge(Integer.parseInt(reader.getValue()));

reader.moveUp();

return student;

}

}

3、執行結果

張三姓名>

19年齡>

自定義的轉換器轉換器>

Security framework of XStream not initialized, XStream is probably vulnerable.

Student(name=張三, age=19)

4、常用的轉換器接口與抽象類

SingleValueConverter:單值轉換接口

AbstractSingleValueConverter:單值轉換抽象類

Converter:常規轉換器接口

十一、****XStream****對象流

1、對象輸出流

package io.github.xstream.test05;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.io.*;

?

public class XStreamTest05 {

public static void main(String[] args) throws IOException, ClassNotFoundException {

XStreamTest05 xStreamTest04 = new XStreamTest05();

String path = "F:\\test.txt";

XStream xStream = new XStream();//需要XPP3庫

xStream.processAnnotations(Student.class);

xStream.autodetectAnnotations(true);

xStreamTest04.writeObject(xStream, path);

}

?

//對象輸出流方法

public void writeObject(XStream xStream, String path) throws IOException {

Student zs = new Student("張三", 20);

Student ls = new Student("李四", 21);

Student ww = new Student("王五", 22);

ObjectOutputStream objectOutputStream = xStream.createObjectOutputStream(new FileOutputStream(path));

objectOutputStream.writeObject(zs);

objectOutputStream.writeObject(ls);

objectOutputStream.writeObject(ww);

objectOutputStream.writeObject("totalStudent");

objectOutputStream.writeInt(3);

objectOutputStream.close();

}

}

?

@AllArgsConstructor

@ToString

//別名注解

@XStreamAlias("student")

class Student {

@XStreamAlias("name")

//把字段節點設置成屬性

@XStreamAsAttribute

private String studentName;

private int age;

}

2、在指定路徑中打開test.txt文件,查看執行結果

20

21

22

totalStudent

3

注意:XStream對象流是通過標準java.io.ObjectOutputStream和java.io.ObjectInputStream對象。因為XML文檔只能有一個根節點,必須包裝在一個序列化的所有元素額外的根節點。這個根節點默認為上面的例子所示。

3、對象輸入流

package io.github.xstream.test05;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.io.*;

?

public class XStreamTest05 {

public static void main(String[] args) throws IOException, ClassNotFoundException {

XStreamTest05 xStreamTest04 = new XStreamTest05();

String path = "F:\\test.txt";

XStream xStream = new XStream();//需要XPP3庫

xStream.processAnnotations(Student.class);

xStream.autodetectAnnotations(true);

xStreamTest04.readObject(xStream, path);

}

?

//對象輸入流方法

public void readObject(XStream xStream, String path) throws IOException, ClassNotFoundException {

ObjectInputStream objectInputStream = xStream.createObjectInputStream(new FileInputStream(path));

System.out.println((Student) objectInputStream.readObject());

System.out.println((Student) objectInputStream.readObject());

System.out.println((Student) objectInputStream.readObject());

System.out.println(objectInputStream.readObject());

System.out.println(objectInputStream.readInt());

}

}

?

@AllArgsConstructor

@ToString

//別名注解

@XStreamAlias("student")

class Student {

@XStreamAlias("name")

//把字段節點設置成屬性

@XStreamAsAttribute

private String studentName;

private int age;

}

4、執行結果

Student(studentName=張三, age=20)

Student(studentName=李四, age=21)

Student(studentName=王五, age=22)

totalStudent

3

**十二、****XStream持久化API******

1、保存Java對象

?package io.github.xstream.test06;

?

import com.thoughtworks.xstream.persistence.FilePersistenceStrategy;

import com.thoughtworks.xstream.persistence.PersistenceStrategy;

import com.thoughtworks.xstream.persistence.XmlArrayList;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.io.File;

import java.util.List;

?

public class XStreamTest06 {

public static void main(String[] args) {

XStreamTest06 xStreamTest06=new XStreamTest06();

xStreamTest06.saveObject();

}

?

//保存Java對象

public void saveObject(){

PersistenceStrategy strategy = new FilePersistenceStrategy(new File("F:\\"));

List list = new XmlArrayList(strategy);

list.add(new Student("張三",13));

list.add(new Student("李四",21));

list.add(new Student("王五",17));

}

}

?

@ToString

@AllArgsConstructor

class Student {

private String name;

private int age;

}

2、運行程序結果,在F磁盤的根路徑可以看到有三個文件:int@0.xml、int@1.xml、int@2.xml,每個對象都被序列化到XML文件里

3、讀取并刪除JavaBean對象

package io.github.xstream.test06;

?

import com.thoughtworks.xstream.persistence.FilePersistenceStrategy;

import com.thoughtworks.xstream.persistence.PersistenceStrategy;

import com.thoughtworks.xstream.persistence.XmlArrayList;

import lombok.AllArgsConstructor;

import lombok.ToString;

?

import java.io.File;

import java.util.Iterator;

import java.util.List;

?

public class XStreamTest06 {

public static void main(String[] args) {

XStreamTest06 xStreamTest06 = new XStreamTest06();

xStreamTest06.deleteObject();

}

//讀取并刪除Java對象

public void deleteObject() {

PersistenceStrategy strategy = new FilePersistenceStrategy(new File("F:\\"));

List list = new XmlArrayList(strategy);

for (Iterator it = list.iterator(); it.hasNext(); ) {

System.out.println((Student) it.next());

//刪除對象序列化文件

it.remove();

}

}

}

?

@ToString

@AllArgsConstructor

class Student {

private String name;

private int age;

}

4、運行程序結果,可以看到把F磁盤的根路徑int@0.xml、int@1.xml、int@2.xml文件刪除了

Security framework of XStream not initialized, XStream is probably vulnerable.

Student(name=張三, age=13)

Student(name=李四, age=21)

Student(name=王五, age=17)

十三、****XStream****操作JSON

1、XStream序列化JSON的重命名

package io.github.xstream.test07;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

import io.github.xstream.test04.StudentConverter;

import lombok.AllArgsConstructor;

import lombok.Getter;

import lombok.Setter;

import lombok.ToString;

?

public class XStreamTest07 {

public static void main(String[] args) {

XStreamTest07 xStreamTest07 = new XStreamTest07();

xStreamTest07.serializeJson();

}

?

public void serializeJson() {

Student student = new Student("張三", 19);

XStream xStream = new XStream(new JettisonMappedXmlDriver());//設置Json解析器

xStream.autodetectAnnotations(true);

//JSON序列化

String xml = xStream.toXML(student);

System.out.println(xml);

//JSON反序列化

student = (Student) xStream.fromXML(xml);

System.out.println(student);

}

}

?

@ToString

@AllArgsConstructor

@XStreamAlias("人")

class Student {

@XStreamAlias("姓名")

private String name;

@XStreamAlias("年齡")

private int age;

}

2、運行結果

{"人":{"姓名":"張三","年齡":19}}

Student(name=張三, age=19)

Security framework of XStream not initialized, XStream is probably vulnerable.

注意:XStream序列化JSON的重命名的方式與其序列化成XML的方式一樣!

3、去掉序列化JSON的根節點

?package io.github.xstream.test07;

?

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;

import com.thoughtworks.xstream.io.json.JsonWriter;

import io.github.xstream.test04.StudentConverter;

import lombok.AllArgsConstructor;

import lombok.Getter;

import lombok.Setter;

import lombok.ToString;

?

import java.io.Writer;

?

public class XStreamTest07 {

public static void main(String[] args) {

XStreamTest07 xStreamTest07 = new XStreamTest07();

xStreamTest07.removeRootNode();

}

?

public void removeRootNode() {

Student student = new Student("張三", 19);

XStream xStream = new XStream(new JsonHierarchicalStreamDriver() {

public HierarchicalStreamWriter createWriter(Writer writer) {

return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);

}

});

//Json序列化

String xml = xStream.toXML(student);

System.out.println(xml);

}

}

?

@ToString

@AllArgsConstructor

@XStreamAlias("人")

class Student {

@XStreamAlias("姓名")

private String name;

@XStreamAlias("年齡")

private int age;

}

4、運行結果

{

"name": "張三",

"age": 19

}

注意:去掉根節點后的JSON串是不能反序列化的,因為XStream不知道它的類型。

5、JSON的解析器區別

前面兩個例子使用了不同的JSON解析器,這里說明他們的不同之處:JettisonMappedXmlDriver:是支持序列化和反序列化Json的。

JsonHierarchicalStreamDriver:只支持序列化,不支持反序列化。

總結

以上是生活随笔為你收集整理的xstream不映射字段_这本XStream学习手册,真的不来看看?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男女啪啪免费看 | 国产人成一区二区三区影院 | 淫片一级国产 | 九九热精品视频 | 亚洲插插插 | 日韩精品一区二区电影 | 欧美性一区二区三区 | 影音先锋精品 | 91抖音在线观看 | 宝贝乖h调教灌尿穿环 | 伊人中文字幕 | 亚洲av永久无码精品一区二区国产 | 免费av片| 日本理论片 | 69色视频 | 国产三级免费观看 | 手机成人av在线 | 国产在线1| 午夜一区二区三区在线观看 | 日本www在线观看 | 亚洲黄业 | 丰满白嫩尤物一区二区 | 亚洲视频国产精品 | 久久国内精品视频 | 免费做a爰片77777 | 成人免费视频一区二区 | a级国产毛片 | 97avcc| 欧美亚洲色图视频 | 日韩中文字幕电影 | 免费看国产黄色 | 99精品欧美一区二区蜜桃免费 | www.好吊色 | 巨大乳の揉んで乳榨り奶水 | av大片网| 无码精品一区二区三区在线播放 | 最近中文字幕mv免费高清在线 | 超碰综合 | 丁香花电影免费播放在线观看 | 呦呦av | 捆绑调教在线观看 | 国产绿帽刺激高潮对白 | 精品国产一区二区三区四区 | 91精品一区二区三区综合在线爱 | 国产传媒欧美日韩 | 美女网站一区 | 天天色综合av | 精品国产乱码久久久久久1区二区 | 国内外免费激情视频 | 色肉色伦交av色肉色伦 | 黑人巨大精品一区二区在线 | 高中男男gay互囗交观看 | 色综合中文| 国产性自拍 | 天天摸天天操天天射 | 日韩成人福利视频 | 91大神久久 | 国产又黄又大又粗的视频 | 国产精品69久久久久 | 黄网站免费入口 | 欧美黄色大片免费看 | 欧美在线观看免费高清 | 国产亚洲女人久久久久毛片 | 懂色av中文一区二区三区天美 | 激情文学亚洲色图 | 丁香综合激情 | 99爱免费 | 2019中文字幕在线 | 看av在线| 欧美大尺度做爰啪啪床戏明星 | 成人在线高清视频 | 人妻激情偷乱视频一区二区三区 | 亚洲女同女同女同女同女同69 | 国产精品9| 日本jizz在线观看 | 成人毛片网 | 毛片中文字幕 | 少妇一级淫片 | 俄罗斯色片| 国产伦精品一区二区三区四区视频 | 91caob| 欧美在线激情 | 怡红院成人在线 | 亚洲欧美在线视频 | 免费黄色小说视频 | 不卡日本 | 春色导航 | 亚洲成a人片77777精品 | 古装做爰无遮挡三级视频 | 国产精品视频h | 成年人在线观看网站 | 国产精品不卡在线 | 免费午夜激情 | 日韩经典一区二区三区 | 亚洲一区二区三区黄色 | 草草草在线 | 亚洲精品在线中文字幕 | 成人高清视频在线观看 | 国产视频精品自拍 |