目录
- Jackson常用注解
- 序列化注解
- @com.fasterxml.jackson.annotation.JsonAnyGetter
- @com.fasterxml.jackson.annotation.JsonFormat
- @com.fasterxml.jackson.annotation.JsonGetter
- @com.fasterxml.jackson.annotation.JsonInclude
- @com.fasterxml.jackson.annotation.JsonIncludeProperties
- @com.fasterxml.jackson.annotation.JsonPropertyOrder
- @com.fasterxml.jackson.databind.annotation.JsonSerialize
- 反序列化注解
- 通用注解
- 序列化注解
Jackson常用注解
序列化注解
@com.fasterxml.jackson.annotation.JsonAnyGetter
此注解只能用在非静态,且无参数的方法之上,且返回的是一个map,如果将此注解打在此方法上,那么返回的map在序列化的时候就像这个类的普通属性一样(就是解除wrap)
private Map<String, Object> map;
@JsonAnyGetter
public Map<String, Object> getMap() {
return map;
}
在getMap方法上加上@JsonAnyGetter注解后,返回数据如下
{
"name": "Jobs",
"age": 40
}
去掉getMap方法上@JsonAnyGetter注解后,返回数据如下
{
"map": {
"name": "Jobs",
"age": 40
}
}
@com.fasterxml.jackson.annotation.JsonFormat
用于序列化日期为字符串
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", locale = "zh_CN", timezone = "Asia/Shanghai")
private Date createTime;
具体参数用途如下:
1 shape 表明字段序列化后的类型,如 STRING 表示序列化成string的格式,而NUMBER表明序列化成数字类型。
2 pattern 这个不过多的介绍,可以自由的设定序列化的样式
3 locale 这个在序列化的时候指定国际化
4 timezone 指定时区 不指定的话默认是GMT,我们这里设置成GMT+8或是Asia/Shanghai都可以
5 lenient 反序列化时,是否激活严格校验模式。一般保持默认即可。
6 with 可以enable JsonFormat.Feature的特征,会覆盖全局配置
7 without 含义与6相反。
@com.fasterxml.jackson.annotation.JsonGetter
序列化时,@JsonGetter 用于给被序列化的方法命名一个逻辑的属性名,优先级比 @JsonProperty 高。
@com.fasterxml.jackson.annotation.JsonInclude
序列化时,只有当属性值为空时,被去除
@JsonInclude(value = JsonInclude.Include.NON_NULL)
private Date createTime;
@com.fasterxml.jackson.annotation.JsonIncludeProperties
序列化时,只序列化指定的属性。
@com.fasterxml.jackson.annotation.JsonPropertyOrder
序列化时,指定属性显示顺序。
@com.fasterxml.jackson.databind.annotation.JsonSerialize
序列化时,用指定的序列化器序列化对象。
因Long类型传输到前端后,JavaScript处理会丢失精度,需转成String字符串类型。
@JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
private Long id;
反序列化注解
@com.fasterxml.jackson.annotation.JsonAnySetter
此注解只能用在非静态,且两个参数的方法之上。当对方传过来的json串有识别不了的属性时,可以使用一个map将其全部的接收下来
private Map<String, Object> map;
@JsonAnyGetter
public Map<String, Object> getMap() {
return map;
}
@JsonAnySetter
public void setMap(String key, Object value) {
if (java.util.Objects.isNull(this.map)) {
this.map = java.util.Collections.synchronizedMap(new HashMap<>());
}
this.map.put(key, value);
}
在setMap方法上加上 @JsonAnySetter 注解后,前台传过来的参数、值,如果Bean中无对应属性名,则交由map接收
@com.fasterxml.jackson.annotation.JsonAlias
反序列化时,指定一个或多个属性别名。
@com.fasterxml.jackson.annotation.JsonSetter
反序列化时,若参数与对象属性不匹配时,通过 @JsonSetter 绑定
@com.fasterxml.jackson.databind.annotation.JsonDeserialize
反序列化时,使用指定的反序列化器转化对象到目标对象。
通用注解
@com.fasterxml.jackson.annotation.JsonProperty
序列化或反序列化时,指定属性的别名。
@com.fasterxml.jackson.annotation.JsonIgnore
序列化或是反序列化的时候,有些字段不希望被暴露出去,可以使用 @JsonIgnore 注解打在属性上面,这样这个字段在序列化和反序列化的时候就会被忽略掉。
@com.fasterxml.jackson.annotation.JsonIgnoreProperties
如果你觉得在多属性上加 @JsonIgnore 注解比较烦,可以在class上面使用@JsonIgnoreProperties一次性将所有需要忽略的字段都写上就可以了
@com.fasterxml.jackson.annotation.JsonIgnoreType
如果一个class的属性是也是个pojo,你需要全部的ignore掉,那么在这个pojo上面加上 @JsonIgnoreType 注解
标签:常用,Jackson,jackson,注解,序列化,com,annotation,fasterxml From: https://www.cnblogs.com/javalouvre/p/17306121.html