readme

多层YAML对象数据的序列化处理过程

需求分析

小水滴公司正在开发小水滴校园管理系统。其中一个重要的功能是管理和维护学生的信息和当前状态。校园管理系统提供了查询学生当前状态的接口。该接口接收学生的姓名作为唯一参数,返回一个YAML结构的字符串,用于表示该学生的信息和状态。如下面的代码所示,StudentInfoManager类的成员方法queryStudent()接受一个字符串name作为参数,返回一个YAML字符串,表示对应学生的信息。

public class StudentInfoManager {
  public String queryStudent(String name) {
    ...
  }
}

操作步骤

在项目单层对象数据序列化中,StudentInfoManager::queryStudent()方法已实现Student对象的查询和将其序列化为YAML字符串的功能。但是,小水滴公司接到了新的需求,需要在Student对象中添加已完成课程的信息。

因此,本项目在com.littlewaterdrop.bean包中新增Course类,用于表示课程信息。该类包含四个成员变量,它们分别是(1) id,长整数类型;(2) name,字符串类型;(3) credits,单精度浮点数类型;和(4) hours,整数类型;分别用于表示课程的编号、名称、学分数和课时数。

package com.littlewaterdrop.bean;

public class Course {
    private Long id = null;  // 课程编号
    private String name = null;  // 课程名称
    private Float credits = null;  // 课程学分数
    private Integer hours = null;  // 课程课时数
    ...
}

在项目com.littlewaterdrop.bean.Student.java文件中,已定义了Student类的部分成员变量。这些成员已在项目单层对象数据序列化中定义。本项目要求扩展Student类的定义,以使得StudentInfoManager::queryStudent()方法返回的YAML字符串中包含学生已完成的课程信息。项目的com.littlewaterdrop.StudentInfoManager.java类已实现,无需修改。

package com.littlewaterdrop.bean;

public class Student {
    private String name = null;
    private Integer age = null;
    private String major = null;
    
    // 需要定义更多的成员变量,以表示该学生完成的课程信息
    ...
}

以下是一个YAML字符串的用例。注意,一名学生可能已完成多门课程的学习。因此,在下面的例子中,courses是一个数组类型的字段,其中每个元素是一个YAML对象。提示:本项目可在Student类中添加一个List类型的成员变量,表示已完成的课程。这个List对象正好对应下面YAML字符串中的courses字段。字段的名称可使用Jackson库中的标注@JsonProperty指定。Jackson序列化的使用方法可参考这里

---
name: "Cindy"
age: 19
major: "Biology"
courses:
- id: 2683
  name: "Introduction to Computer Science"
  credits: 3.0
  hours: 48
- id: 2686
  name: "Data Structures"
  credits: 3.5
  hours: 56

参考文档

  1. YAML数据格式
  2. Jackson库的工作原理和使用方法
  3. Java语言的特性
  4. Maven工程管理工具
Copyright  2019 Little Waterdrop, LLC. All Rights Reserved.