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

Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户

1. 场景

有一项工作,需要将数据从一个服务S中读取出来(得到的是一个JSON),将数据解析转换以后构造成一个数组的类型A的对象,写入到一个服务T中。

  • A.class
@Data
public class A
{String f0 ;String f1 ;
}

在发现需要增加一种类型A的字类型B,这个类型属性非常多(将近一百),在这种情形下,如果直接定义出类型B来,定义那么多属性,还得设置,将会有更大的工作量,所以考虑是不是这些额外的信息可以用一个Map来存储。变成如下结构:

  • A.class
@Data
public class A
{String f0 ;String f1 ;Map<String , Object> otherPropMap ;
}

输出的JSON:

{"f0":"" ,"f1":"" ,"op1":"" ,"op2":"" ,
}

2. 做法

@Data
public class A
{String f0 ;String f1 ;Map<String , Object> otherPropMap ;@JsonAnyGetterpublic Map<String , String> getOtherPropMap(){return otherPropMap ;}
}

在jackson-annotations-2.11时,@JsonAnyGetter注解只能用在Method上,在2.13版本中,已经可以直接使用在属性上了。

3. JsonUnwrapped用法

@JsonUnwrapped注解,只对Bean其作用,Map是不能起作用的。例如下面是可以的。

@Data
public class A
{String f0 ;@JsonUnwrappedB f1 ;
}// B.java
public class B
{String f3 ;String f4 ;
}

那么输出结果是:

{"f0":"" ,"f3":"" ,"f4":""
}
http://www.lryc.cn/news/287994.html

相关文章:

  • 排序算法——冒泡排序算法详解
  • 宋仕强论道之华强北的缺货潮(十六)
  • 登录注册页面
  • 视频美颜SDK详解:动态贴纸技术的前沿探索
  • vue3 实现上传图片裁剪
  • flink1.18 广播流 The Broadcast State Pattern 官方案例scala版本
  • vueRouter中scrollBehavior实现滚动固定位置
  • 解决WinForms跨线程操作控件的问题
  • 从零开始:Git 上传与使用指南
  • Docker compose部署Golang服务
  • Day36 435无重叠区间 763划分字母区间
  • 【Servlet】如何编写第一个Servlet程序
  • 读懂比特币—bitcoin代码分析(五)
  • uniapp使用uQRCode插件生成二维码的简单使用
  • 【寒假每日一题·2024】AcWing 4965. 三国游戏(补)
  • docker 安装mongodb 数据库
  • 整数反转算法(leetcode第7题)
  • 微信小程序(十)表单组件(入门)
  • xcode 设置 ios苹果图标,为Flutter应用程序配置iOS图标
  • 什么是IDE?新手用哪个IDE比较好?
  • 【数据库学习】pg安装与运维
  • 第二篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:图像处理
  • 【vue oidc-client】invalid_requestRequest Id: 0HN0OOPFRLSF2:00000002
  • 什么是中间人攻击? ssh 连接出现 Host key verification failed 解决方法
  • 数据结构系统刷题
  • 【RabbitMQ】延迟队列之死信交换机
  • 2024交通运输工程与土木建筑工程国际会议(ICTECCE2024)
  • 搜索引擎Elasticsearch了解
  • 【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射
  • windows下git pull超时,ping不通github