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

文章讲述了在处理大量属性的类型转换时,如何使用Jackson库的@JsonAnyGetter和@JsonUnwrapped注解优化代码,以及它们在不同版本中的适用性。
摘要由CSDN通过智能技术生成

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 ;
  
  @JsonAnyGetter
  public 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 ;
  
  @JsonUnwrapped
  B f1 ;
}

// B.java
public class B
{
	String f3 ;
	String f4 ;
}

那么输出结果是:

{
  "f0":"" ,
  "f3":"" ,
  "f4":""
}
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值