Jackson详解及其常用注解

常用注解

1、@JsonIgnore

@JsonIgnore此注解用于属性或者方法上(最好是属性上),用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解,一般标记在属性或者方法上,返回的json数据即不包含该属性。

因此:getAuthorities()所返回的内容不会出现在返回结果中。

案例:使密码不显示

在实体对象中的password属性上加@JsonIgnore,前端将接收不到密码属性值

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@ApiModel(value = "User", description = "用户实体,用户相关属性信息")
public class User {

    @JsonIgnore
    @ApiModelProperty(value = "密码", name = "password", required = false)
    private String password;
}

2、@JsonIgnoreProperties

@JsonIgnoreProperties作用在类上,与@JsonIgnore作用相同,都是告诉jackson该忽略哪些属性,可以同时指定多个属性

3、@JsonFormat

@JsonFormat此注解用来设置时间字段的格式,但是不能直接使用,在中国会和我们的北京时间相差8个小时,由于我们是东八区(北京时间),所以我们在格式化的时候要指定时区(timezone)

import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;

public class MenuStatisticsDetail {

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}

4、@JsonProperty

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为true_name,这样前台接收的属性名称就为true_name

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {

    @JsonProperty(value = "true_name")
    private String trueName;
}

5、@JsonInclude

只在序列化情况下生效

前后端分离的项目,框架中封装了返回给前端的结果。
但是在数据库中查询到的数据为null 的时候,响应的内容没有了,但是前端想要得到这个类型的结构(比如说是个实体,那么就返回他的各个属性;是个数据或集合就返回 [ ] )。最终发现是@JsonInclude这个注解过滤掉了当返回值为null 的时候的属性。
@JsonInclude(JsonInclude.Include.ALWAYS) 默认
@JsonInclude(JsonInclude.Include.NON_DEFAULT ) 属性为默认值不序列化
@JsonInclude(JsonInclude.Include.NON_EMPTY ) 属性为空("") 或者为 NULL 都不序列化
@JsonInclude(JsonInclude.Include.NON_NULL ) 属性为NULL 不序列化

将该标记放在属性上,如果该属性满足它的条件则不参与序列化 ;如果放在类上,那么该标记对这个类的全部属性起作用。例如:

import com.fasterxml.jackson.annotation.JsonInclude;

public class User {

    @JsonInclude(JsonInclude.Include.NON_NULL) //当电话为null时就不传
    private String phone;
}

 6、@JsonPropertyOrder

只在序列化情况下生效

在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。

@JsonPropertyOrder(value={"userName","userId"})
public class User {
    private String userId;
    private String userName;
}

7、@JsonSetter

只在反序列化情况下生效

 @JsonSetter 标注于 setter 方法上,类似 @JsonProperty ,也可以解决 json 键名称和 java pojo 字段名称不匹配的问题。

public class User{

    private String tName;

    @JsonSetter("trueName")
    public void settName(String tName) {
        this.tName= tName;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值