当前位置: 首页 > news >正文

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)

http://www.mrgr.cn/news/12518.html

相关文章:

  • ssrf,csrf漏洞复现
  • 蓝牙资讯|2024Q2全球个人智能音频市场出货量1.1亿部
  • 集合及数据结构第十节(下)————常用接口介绍、堆的应用和java对象的比较
  • 【Linux入门】shell基础篇——while循环与until循环
  • 简易的 Websocket + 心跳机制 + 尝试重连
  • 全国首个高速公路5G-A通感一体基站在宁开通测试
  • Mysql的命令大全
  • 【附源码】Python :三棱柱建模
  • JVM经典的垃圾收集器
  • 自动化编译项目:使用 Bash 脚本与 CMake
  • 游戏开发中的打砖块反弹(godot)
  • 自动化刷题小练习
  • pytorch Dataset类代码学习
  • 牛客小白月赛99部分题解
  • 分布式系统
  • SpringBoot项目整合智谱AI + SSE推送流式数据到前端展示 + RxJava得浅显理解
  • WIFI驱动开发
  • 金融工程--基于akshare的数据获取
  • P1088 [NOIP2004 普及组] 火星人
  • Java | Leetcode Java题解之第376题摆动序列