springBoot常用注解
Jackson相关注解
@JsonProperty
- 将sex序列化成gender
@JsonProperty(value = "gender")
private String sex;
序列化结果就变成了
{
"name" : "小刘",
"gender" : "男"
}
- 还可以给序列化的字段指定序列化的顺序,序号越小越靠前
@JsonProperty(value = "gender",index = 1)
private String sex;
@JsonProperty(value = "cname",index = 2)
private String name;
序列化结果如下
{
"gender" : "男",
"cname" : "小刘"
}
- 对属性设置序列化权限READ_ONLY、WRITE_ONLY、READ_WRITE
在pojo有些特殊的属性,比如id属性,一般来说我们序列化的时候可以序列化掉,但是反序列化的时候我们希望忽略该字段,因为该id字段可能不安全,这样的id我们称为READ_ONLY的,相反的只用在反序列化,而序列化的时候不输出的字段我们称为WRITE_ONLY(Write_only不参与序列化)。还有些字段不管自否可见,都要可以序列化和反序列化,我们称为READ_WRITE。
@JsonProperty(value = "gender",index = 1,access = JsonProperty.Access.READ_ONLY)
private String sex;
@JsonProperty(value = "cname",index = 2,access = JsonProperty.Access.WRITE_ONLY)
private String name;
序列化结果如下
{
"gender" : "男"
}
@JsonPropertyOrder
- @JsonPropertyOrder主要提供在类上的直接,指定序列化的顺序
@JsonPropertyOrder({"unknown","cname","gender"})
class JsonPropertyPojo{
@Getter
@Setter
@JsonProperty(value = "gender")
private String sex;
@Getter
@Setter
@JsonProperty(value = "cname")
private String name;
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String unknown;
}
我们直接的在类上执行了序列化的顺序,如果有字段没有指定,默然排在指定了顺序的字段之后
@JsonInclude过滤无用信息
- 链接:JsonInclude注解
- 为null的数据序列化之后,对前端来说,没有任何的意义,在序列化的时候我们可以使用@JsonInclude将这个为null的字段去除
@JsonInclude注解提供了四个属性
- value
一般来说,pojo中只有简单的属性的话,只需要使用此value配置就可以了 - content
在pojo中可能包含复杂的复合对象,比如map和optional,需要进一步的判断此复合对象的内容是否为空的时候,就可以使用到此配置 - valueFilter
如果Jackson提供的value配置都不能满足你的要求的话,我们可以自定义value的过滤器,由我们自己来决定哪些字段是否序列化 - contentFilter
如果Jackson提供的content配置都不能满足你的要求的话,我们可以自定义content的过滤器,由我们自己来决定哪些复杂的复合属性是否序列化
序列化策略
1 ALWAYS 默认级别,所有的pojo的属性都会被序列化
2 NON_NULL 只有非null的属性才会被序列化
3 NON_ABSENT java中有些复杂的数据结构,比如AtomicReference或是Optional,如果某个属性是这个类型,虽然此属性不为null,但是其包装的内容是null的,此注解的作用是,只有此属性不为null,且其包装的内容是有值的才会被序列化
4 NON_EMPTY 不为空,有些属性如果是Collection或是Map或是Timestamp等,比如某个属性是Timestamp且其值是0,那么可以认为这个属性是empty
5 NON_DEFAULT 只有此属性不为默认值的时候,才序列化
6 CUSTOM 自定义,filter定义的过滤器需要重写equals方法,如果返回false,那么进行序列化,如果为true,就不序列化
7 USE_DEFAULTS 使用默认
lombok相关注解
@Data、@Getter、@Setter
使用方法
-
在pom.xml中导入依赖包
org.projectlombok
lombok
1.18.4
provided
导入后,如果还无法使用,按照第二个步骤继续操作 -
在idea中导入lombok插件
步骤:file->setting->Plugins->Marketplace->搜索lombok安装重启
@Data
@Data注解包含了@Getter@Setter,且有toString(),equals,hashcode等方法
@Getter、@Setter
包含了Getter和setter方法
注:手动编写的setter、getter方法将会覆盖自动生成的getter、setter代码
@AllArgsConstructor和@NoArgsConstructor
它是lombok中的注解,作用在类上;
使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
对应的 @NoArgsConstructor 是添加一个无参数的构造器,一般使用@Builder注解时同时会使用@AllArgsConstructor和@NoArgsConstructor
@NotNull和@Nullable
- 作用于方法上、参数上、字段上
- @NotNull表示传入的值不可以为null,否则发出提示警告
- @Nullable则表示传入的值可以为null,不会发出提示警告
- 提示警告图示
@Deprecated
@Deprecated是java内置注解,此注解可以用在方法,属性,类上,表示不推荐程序员使用,但是还可以使用