Jackson常用注解

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 注解

posted @ 2023-04-11 16:51  Bruce.Chang.Lee  阅读(67)  评论(0编辑  收藏  举报