Spring序列化与反序列化
来源:互联网 发布:软件配置管理人员职责 编辑:程序博客网 时间:2024/04/30 09:45
环境准备:
使用的是maven管理jar包
使用的是jackson-databind
<dependency> <groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.8</version></dependency>
代码准备:
Student类以及相应的get set方法
public class Student {private long id;private String name;}Teacher类以及相应的get set方法
public class Teacher {private long id;private String name;}Record类以及相应的get set方法
public class Record {private Student student;private Teacher teacher;private String className;//班级名称}RecordList类以及相应的get set方法
public class RecordList {private List<Record> list;}
测试数据:创建一个包含很多Record的
RecordList recordList=new RecordList();List<Record> list = new ArrayList<Record>();for (int i = 1; i <= 3; i++) {Record record = new Record();Student student = new Student();Teacher teacher = new Teacher();student.setId(i);student.setName("stuName---" + i);teacher.setId(i);teacher.setName("teaName---" + i);record.setClassName("class " + i);record.setStudent(student);record.setTeacher(teacher);list.add(record);}recordList.setList(list);String serialized = new ObjectMapper().writeValueAsString(recordList);System.out.println(serialized);
序列化结果
{ "list": [ { "student": { "id": 1, "name": "stuName---1" }, "teacher": { "id": 1, "name": "teaName---1" }, "className": "class 1" }, { "student": { "id": 2, "name": "stuName---2" }, "teacher": { "id": 2, "name": "teaName---2" }, "className": "class 2" }, { "student": { "id": 3, "name": "stuName---3" }, "teacher": { "id": 3, "name": "teaName---3" }, "className": "class 3" } ]}
反序列化:
RecordList item = new ObjectMapper().readValue(serialized, RecordList.class);System.out.println("反序列化:"+item.toString());
自定义的序列化
public class RecordListSerializer extends JsonSerializer<RecordList> {@Overridepublic void serialize(RecordList value, JsonGenerator jsonGenerator, SerializerProvider provider)throws IOException, JsonProcessingException {List<Record> list= value.getList();String stuInfos="";String teacherInfos="";String classInfos="";for(Record record:list){stuInfos+=record.getStudent().getId()+" : "+record.getStudent().getName()+" ";teacherInfos+=record.getTeacher().getId()+" : "+record.getTeacher().getName()+" ";classInfos+=record.getClassName()+" ";}jsonGenerator.writeStartObject();jsonGenerator.writeStringField("stuInfos", stuInfos);jsonGenerator.writeStringField("teacherInfos",teacherInfos);jsonGenerator.writeStringField("classInfos",classInfos);jsonGenerator.writeEndObject();}}
ObjectMapper mapper = new ObjectMapper();SimpleModule module = new SimpleModule();module.addSerializer(RecordList.class, new RecordListSerializer());mapper.registerModule(module);String ser = null;try {ser = mapper.writeValueAsString(recordList);} catch (JsonProcessingException e) {e.printStackTrace();}System.out.println(ser);序列化结果:
{ "stuInfos": "1 : stuName---1 2 : stuName---2 3 : stuName---3 ", "teacherInfos": "1 : teaName---1 2 : teaName---2 3 : teaName---3 ", "classInfos": "class 1 class 2 class 3 "}自定义反序列化
只解析了classInfos
public class RecordListDeserializer extends JsonDeserializer<RecordList> {@Overridepublic RecordList deserialize(JsonParser jp, DeserializationContext ctxt)throws IOException, JsonProcessingException {JsonNode node = jp.getCodec().readTree(jp);String className = node.get("classInfos").asText();RecordList recordList = new RecordList();String[] s = className.split(" ");List<Record> list = new ArrayList<Record>();for(int i=0;i<s.length;i++){Record r=new Record();list.add(r);}for (int i = 0; i < s.length; i++) {list.get(i).setClassName(s[i]);}recordList.setList(list);return recordList;}}
ObjectMapper mapper1 = new ObjectMapper();SimpleModule module1 = new SimpleModule();module.addDeserializer(RecordList.class, new RecordListDeserializer());mapper.registerModule(module);RecordList readValue = mapper.readValue(ser, RecordList.class);System.out.println(readValue.toString());结果为:
RecordList [list=[Record [student=null, teacher=null, className=class 1], Record [student=null, teacher=null, className=class 2], Record [student=null, teacher=null, className=class 3]]]
还有一种简单的方式就是用注解
@JsonSerialize(using = RecordListSerializer.class)@JsonDeserialize(using = RecordListDeserializer.class) public class RecordList {private List<Record> list;@Overridepublic String toString() {return String.format("RecordList [list=%s]", list);}public List<Record> getList() {return list;}public void setList(List<Record> list) {this.list = list;}}使用就像这样即可
String serialized = new ObjectMapper().writeValueAsString(recordList);System.out.println(serialized);
0 0
- Spring序列化与反序列化
- 序列化与反序列
- 序列化与反序列
- XML序列化与反序列化
- 对象序列化与反序列化
- 序列化与反序列化
- 转载:序列化与反序列化
- c#序列化与反序列化
- java序列化与反序列化
- XML序列化与反序列化
- 序列化与反序列化
- 序列化与反序列化
- C#序列化与反序列化
- java序列化与反序列化
- XML序列化与反序列化
- 再看序列化与反序列化
- 序列化与反序列化对象
- 序列化与反序列化
- Hibernate做同一个事物中做两次删除问题
- 一句话说明canvas 中的save()和restore()的用途
- js判断手指滑动方向(移动端)
- localtime与localtime_r
- Elasticsearch.Net Nest 5.0.0 用法
- Spring序列化与反序列化
- Android异常:android.os.TransactionTooLargeException
- 题目1481:Is It A Tree?
- Java 大数BigDecimal常用处理
- Linux中rc的含义
- 常用三方总结
- python csv 读取两种方法
- 坐标系之间的旋转平移变换与对应变换矩阵的关系
- uva6692