Jackson 忽略注解 @JsonIgnore 不生效

2024-08-27 19:28

本文主要是介绍Jackson 忽略注解 @JsonIgnore 不生效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

  • com.fasterxml.jackson.core
    • jackson-databind:2.15.0
    • jackson-annotation:2.15.0
// 设置保留字段
@Transient
@JsonIgnore // 注解不生效
private final transient String path = null;

原因

Jackson 版本 2.15.0 下, transient 关键字和 @JsonIgnore 冲突, 导致忽略失效

解决办法临时解决办法

  • 方法1: 将 @JsonIgnore 注解放在 getter 方法上
  • 方法2: 去掉 transient
  • 方法3: 升级 jackson 到最新版本
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.17.2'

Reference

jackson-databind issue

  • issue #3874: 2.15.0-rc1 regression: transient fields are serialized
  • issue #3909: @JsonIgnore not working in 2.15.0 with transient fields having a public getter method

其他

  • 字段忽略, 有两种方法
  1. @JsonIgnore 注解

直接在希望忽略的字段上添加注解 @JsonIgnore

  1. transient 关键字

除了使用上面的注解之外,也可以使用 jdk 原生提供的关键字 transient 来声明需要忽略的字段, 同时开启设置 (默认的场景下, 字段上修饰有 transient 关键字, 也不会忽略)

transient 是作用在 对象序列化 上的关键字 (如 jdk 自带的序列化到文件)

objectMapper = new ObjectMapper();
// 忽略 transient 关键字的配置 (2选1)
// case1
objectMapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);
// case2
objectMapper.setVisibility(objectMapper.getSerializationConfig().getDefaultVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.ANY).withGetterVisibility(JsonAutoDetect.Visibility.NONE).withIsGetterVisibility(JsonAutoDetect.Visibility.NONE));
  • Jacskon 只会处理 public 修饰的成员 (pub属性 / get / set 方法)
  • 必须有无参构造器
  • 类至少包含一个属性 (SerializationFeature.FAIL_ON_EMPTY_BEANS)
No serializer found for class com.xxxx.TestBean \
and no properties discovered to create BeanSerializer \
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

这篇关于Jackson 忽略注解 @JsonIgnore 不生效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112561

相关文章

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

SpringCloud中的@FeignClient注解使用详解

《SpringCloud中的@FeignClient注解使用详解》在SpringCloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解来标记Feign客户端接口,这篇文章... 在Spring Cloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr