一个类就创建Json反序列化所需的属性
平时我们开发的时候总是会有对接其他系统的需求,其他系统返回的Json并不总是简单的
{“k1”:“v1”,“k2”:“v2”}
这种类型,有可能里面包含的数据比较杂,会出现多层嵌套呀,数组的值这种情况,我们反序列化的时候用Map当然也是可以处理的,就是比较麻烦,得一直去找,所以一般会创建一个类接收,但是遇到Json嵌套的比较多的时候并且里面的k和v属性也比较多的时候额外创建其他类又太麻烦,这种情况下我们可以使用Java的静态内部类去处理,如下
JSON
{“username”:“k1”,“password”:“123”,“labels”:[{“label”:“l1”},{“label”:“l2”}]}
例如一个JSON现在是这种两层嵌套的,labels里面是一个数组
Java
对应的Java类可以这样定义,使用内部类Inner定义JSON里的label,外部类呢就使用List接收Inner即可,这里最好使用静态内部类。因为当内部类为非static的时候,要创建该内部类必须持有对应的外部类实例才可创建(当然优势是可以访问这个外部类),但是静态内部类创建的时候则不需要有外部类的实例,可以随意创建。
在JSON反序列化的上下文中,我们通常期望的是从JSON数据直接创建对象的实例,而不依赖于任何现有的对象实例。因此,静态内部类更适合这种情况,因为它们不依赖于外部类的实例,可以独立存在。
这样即可定义比较复杂的JSON而不需要定义许多的类文件(一个类+内部类即可完成)
@Data
public class Outer {
private String username;
private String password;
private List<Inner> labels;
@Data
public static class Inner{
private String label;
}
}
实际运行如图