首页 > 编程知识 正文

序列化的方式有哪些,java反序列化漏洞

时间:2023-05-03 09:35:24 阅读:54414 作者:4498

预览上一句操作、导入依赖关系2、JavaBean2.1、user.java2.2、Job.java 3、Java对象序列化和反序列化4、Aarray、List序列化和反序列化5、Map、set coco

前言

GSON弥补了JSON的诸多不足,实用上适用于Java开发。 本节介绍如何使用GSON处理java对象和json数据之间的交互。 这还包括常用对象序列化和反序列化的知识。

参照报道

33559 www.Jian Shu.com/p/75 a 50 aa0cad1

33559 www.yii Bai.com/gson/gson _ overview.html

操作1、部署为implementation ' com.Google.code.gson : gson :2.8.6 ' 2、JavaBean 2.1、user.Javapackagecom.enjoy . import com.Google.gson.annotations.serialized name; 公共类用户{ @ exposeprivatestringusername; @ expose私有字符串密码; @Expose private int age; @Expose private boolean isStudent; @Expose private Job job; //serialize :是否参加序列化,deserialize是否参加序列化@ expose (序列化=false,序列化=false )私有ize 隐私传输测试2; @expose//class不能是字段名@serializedname('class ' ) private int cls; 公共用户(string username,String password,int age,boolean isStudent ) { this.userName=userName; this.password=password; this.age=age; this.isStudent=isStudent; }publicvoidsettest1(inttest1) { this.test1=test1; }publicvoidsettest2(inttest2) { this.test2=test2; }publicvoidsetcls(intcls ) { this.cls=cls; }公共字符串getusername (() { return userName; }公共字符串获取密码() { return password; } public int getAge () { return age; }公共布尔is student () { return isStudent; }公共作业get job () { return job; }publicvoidsetjob(jobjob ) { this.job=job; } @Override public String toString () return ' user (' username=' ' username '' ',password='' password '' ' ' ' ) '') ) isStudent=' isStudent ',job=' job ',test1=' test1 ',test2=' test2',cls=' cls '}; }} 2.2、job.javapackagecom.enjoy.gsondemo.bean; 公共类作业{专用测试名称; 私有内销售; 公共作业(字符串名称,int salary ) )。

this.name = name; this.salary = salary; } @Override public String toString() { return "Job{" + "name='" + name + ''' + ", salary=" + salary + '}'; }} 3、对Java对象进行序列化与反序列化 @Test public void testNestedObject() { //java对象 User u1 = new User("zzuli", "123", 18, false); Job job = new Job("工人", 10000); u1.setJob(job); //Gson提供的Gson对象 Gson gson = new Gson(); //序列化 String json = gson.toJson(u1); System.out.println("序列化:" + json); User u2 = gson.fromJson(json, User.class); System.out.println("反序列化:" + u2.getUserName() + "-" + u2.getPassword() +"-"+u2.getJob()); }

4、对Aarray、List进行序列化与反序列化 package com.enjoy.gsondemo;import com.enjoy.gsondemo.bean.User;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import org.junit.Test;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.List;public class ArrayUnitTest { @Test public void testArray() { User[] users1 = new User[3]; //java对象 users1[0] = new User("wgdsn", "123", 18, false); users1[1] = new User("炙热的吐司", "123", 88, true); //Gson提供的Gson对象 Gson gson = new Gson(); //序列化 String json = gson.toJson(users1); System.out.println("序列化:"+json); User[] users2 = gson.fromJson(json, User[].class); System.out.println("反序列化0:"+users2[0]); System.out.println("反序列化1:"+users2[1]); System.out.println("反序列化2:"+users2[2]); } @Test public void testListObject() { List<User> list1 = new ArrayList<>(); list1.add(new User("wgdsn", "123", 18, false)); list1.add(new User("炙热的吐司", "123", 88, true)); list1.add(null); //Gson提供的Gson对象 Gson gson = new Gson(); //序列化 String json = gson.toJson(list1); System.out.println("序列化:"+json); //反序列化 Type type = new TypeToken<List<User>>() { }.getType(); List<User> list2 = gson.fromJson(json, type); System.out.println("反序列化0:"+list2.get(0).getUserName()); System.out.println("反序列化1:"+list2.get(1)); System.out.println("反序列化2:"+list2.get(2)); }}

Array

List

5、对Map、Set集合进行序列化与反序列化 package com.enjoy.gsondemo;import com.enjoy.gsondemo.bean.User;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import org.junit.Test;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;public class MapUnitTest { @Test public void testMap() { Map<String, User> map1 = new HashMap<>(); //java对象 map1.put("1", new User("wgdsn", "123", 18, false)); map1.put("2", new User("炙热的吐司", "123", 88, true)); map1.put("3", null); map1.put(null, null); //Gson提供的Gson对象 Gson gson = new Gson(); //序列化 String json = gson.toJson(map1); System.out.println(json); Type type = new TypeToken<Map<String, User>>() { }.getType(); Map<String, User> map2 = gson.fromJson(json, type); System.out.println(map2.get(null)); System.out.println(map2.get("1")); } @Test public void testSet() { Set<User> set1 = new HashSet<>(); set1.add(new User("wgdsn", "123", 18, false)); set1.add(new User("炙热的吐司", "123", 88, true)); set1.add(null); //Gson提供的Gson对象 Gson gson = new Gson(); //序列化 String json = gson.toJson(set1); System.out.println(json); //反序列化 Type type = new TypeToken<Set<User>>() { }.getType(); Set<User> set2 = gson.fromJson(json, type); Iterator<User> iterator = set2.iterator(); while (iterator.hasNext()) { User next = iterator.next(); System.out.println("反序列化:" + next); } }}

Map

Set

注解解释

@SerializedName注解
用于手动指定序列化的key值

@SerializedName("money")private String salary;@SerializedName({"money", "salary"}) // 可以有多个备选值private String salary;

@Expose()注解
果想要让java类的某些字段不参加序列化或反序列化,可以显示来设置。如:

@Expose(serialize=false,deserialize=false)private String name;

注意使用该注解进行序列化与反序列化需要一些列方式创建Gson对象

//Gson提供的Gson对象 Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。