我是靠谱客的博主 忐忑小白菜,最近开发中收集的这篇文章主要介绍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;
}
}

最后

以上就是忐忑小白菜为你收集整理的Jackson详解及其常用注解的全部内容,希望文章能够帮你解决Jackson详解及其常用注解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部