1 @JsonProperty
标记注释可用于将非静态方法定义为逻辑属性(取决于其签名)的“setter”或“getter”,或者将要使用(序列化,反序列化)的非静态对象字段定义为逻辑属性。
默认值(“”)表示字段名称用作属性名称而不进行任何修改,但可以将其指定为非空值以指定其他名称。 属性名称是指外部使用的名称,是 JSON 对象中的字段名称。
从 Jackson 2.6 开始,这个注释也可以用来改变 Enum 的序列化,如下所示:
1 | public enum MyEnum { |
作为使用 JsonValue 注释的替代方法。
在 @JsonProperty
中 access
属性可以用于更改访问者(getter,field-as-getter)和 mutators(contructor 参数,setter,field-as-setter)的可见性的可选属性,以便其他可见的访问者(如私有的 getter) 可能用过了; 或者忽略其他可见的访问者。
默认值 Access.AUTO,这意味着根据可见性和其他注释确定访问权限。
一般用来 不序列化某些字段,例如不序列化密码
1 | @JsonProperty(access = com.fasterxml.jackson.annotation.JsonProperty.Access.WRITE_ONLY) |
2 忽略 NULL 的属性
@JsonInclude
: 实体类/属性使用的注解,用于忽略 NULL 的属性,空的属性或者 NULL 的类。
有些值为 NULL 不想传过去,往往还得在 SQL 或者代码做循环判断,损耗性能
1 | @JsonInclude(Include.NON_NULL),为null的字段将不显示。 |
3 Java8 日期时间类支持
Java8 增加了一套全新的日期时间类,Jackson 对此也有支持。这些支持是以 Jackson 模块形式提供的,所以首先就是注册这些模块。
1 | ObjectMapper mapper = new ObjectMapper() |
也可以用过指定序列化器和反序列化器的方式支持。
有时候在使用 LocaleDateTime 字段后,经过 Jackson 时,可以在 LocaleDateTime 字段上增加以下注释
1 | @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
4 指定属性格式化日期/时间
1 | @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
5 忽略属性
User 实体中会有字段 password 字段,当返回用户信息给前台的时候,当然是不希望将 password 值也一并返回,
所以,可以在 password 属性上加上注解 JsonIgnore
或者,可以在 User 类上加上注解 @JsonIgnoreProperties(value = "{password}")
都可以在 json 序列化时将 java bean 中的一些属性忽略掉,序列化和反序列化都受影响。