有一项工作,需要将数据从一个服务S中读取出来(得到的是一个JSON),将数据解析转换以后构造成一个数组的类型A的对象,写入到一个服务T中。
@Data
public class A
{
String f0 ;
String f1 ;
}
在发现需要增加一种类型A的字类型B,这个类型属性非常多(将近一百),在这种情形下,如果直接定义出类型B来,定义那么多属性,还得设置,将会有更大的工作量,所以考虑是不是这些额外的信息可以用一个Map来存储。变成如下结构:
@Data
public class A
{
String f0 ;
String f1 ;
Map<String , Object> otherPropMap ;
}
输出的JSON:
{
"f0":"" ,
"f1":"" ,
"op1":"" ,
"op2":"" ,
}
@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版本中,已经可以直接使用在属性上了。
@JsonUnwrapped注解,只对Bean其作用,Map是不能起作用的。例如下面是可以的。
@Data
public class A
{
String f0 ;
@JsonUnwrapped
B f1 ;
}
// B.java
public class B
{
String f3 ;
String f4 ;
}
那么输出结果是:
{
"f0":"" ,
"f3":"" ,
"f4":""
}