一、过滤掉值为null的字段

有的时候我们不需要返回值为 null 的字段,可以在对应的实体类上加注解
@JsonInclude(JsonInclude.Include.NON_NULL)@Datapublic class JsonMsg
但是如果有很多个实体类的话,一个一个的去加注解就显得很麻烦,可以直接在配置文件中进行配置
二、jackson给对象字段序列化-反序列化设置别称
有时候字段的名称(比如password)过长,可以采用设置别名的方式来简化数据输入(password简化成pwd)
只需要在对应的实体类的字段上加上注解@JsonProperty 然后配置注解的 value 属性即可。
@JsonProperty(value = "pwd")private String password;
三、jackson对hibernateLazyInitializer属性序列化异常
最简单直接的方式,直接忽略掉这个字段的信息(不显示)

详细解释:
仔细看了下报错信息,发现直接原因是:jackson在对hibernate的持久化实体类的代理对象进行序列化时,代理类中的”hibernateLazyInitializer”属性为空,触发了系列化规划SerializationFeature.FAIL_ON_EMPTY_BEANS,即“出现空Bean时触发序列化失败”!
“hibernateLazyInitializer”属性为空之所以为空是因为我们禁用了延迟加载(open-in-view: true),设为false又会引发no Session错误。
报错信息中告诉我们可以通过禁用jackson的SerializationFeature.FAIL_ON_EMPTY_BEANS这条系列化规则来避免该异常(异常信息中的红色字所示),我们可以通过以下方式使用禁用SerializationFeature.FAIL_ON_EMPTY_BEANS规则的新ObjectMapper替换默认的ObjectMapper的方法来达到目的:
@SpringBootApplication@Configurationpublic class ProviderUserApplication {public static void main(String[] args) {SpringApplication.run(ProviderUserApplication.class, args);}@Beanpublic ObjectMapper objectMapper() {return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);}}
四、jackson对象中双向引用出现递归调用的问题
@JsonBackReference和@JsonManagedReference:这两个标注通常配对使用,通常用在父子关系中。
jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore均是为了解决对象中存在双向引用导致的无限递归问题.
package com.ctguyxr.satokendemo.entity;import com.fasterxml.jackson.annotation.JsonBackReference;import com.fasterxml.jackson.annotation.JsonManagedReference;import lombok.Data;import javax.persistence.*;import java.util.List;/*** Created By Intellij IDEA** @author Xinrui Yu* @date 2021/11/28 20:59 星期日*/@Entity@Data@Table(name = "t_city")public class City {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;private String name;@JsonManagedReference@OneToMany(cascade = CascadeType.ALL)@JoinColumn(name = "city_id")private List<College> colleges;}
package com.ctguyxr.satokendemo.entity;import com.fasterxml.jackson.annotation.JsonBackReference;import com.fasterxml.jackson.annotation.JsonIgnore;import com.fasterxml.jackson.annotation.JsonManagedReference;import lombok.Data;import javax.persistence.*;import javax.persistence.criteria.CriteriaBuilder;import java.util.List;/*** Created By Intellij IDEA** @author Xinrui Yu* @date 2021/11/28 21:00 星期日*/@Entity@Data@Table(name = "t_colleges")public class College {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;private String name;@JsonBackReference@ManyToOne(cascade = CascadeType.ALL)private City city;}
请求示例:

