json序列化程序,将classname添加为使用jackson objectmapper转换为json的对象中所有对象的字段

ymzxtsji  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(270)

我试图添加一个新字段,指定json响应中所有对象的类名。我从ejb服务响应中获取对象。对象的类型为object。对象可以包含任何内容—基元类型成员变量、基元 Package 器列表、引用列表/集合、任何类型的Map。
得到响应后,我使用jackson对象Map器将该对象转换为json并发送到客户端。
但是,我希望我的对象(我正在将其转换为json)中的任何对象(即原语 Package 器以外的引用)——无论是列表中的对象、Map中的对象,还是任何地方,在转换为json响应中的json对象之后,都要有一个新字段作为“type”,指定对象类名。
例如:在使用对象Map器将我的对象转换为json之后,我得到了这个json响应。我只知道这个物体的类别。

{
"values": [{i: 10}, {i: 20, anotherSubClassOfAField: 25}], #Comment  => List of implementation objects of some class or interface A.
"mapvalues" : {"val1" : "hello", "val2" : [{j: 30}, {j: 10, anotherSubClassOfBField: "Hello"}] # Comment: List of implementation objects of some class or interface B. }, 
"name" : "Test"
}

我希望将输出序列化为:

{
"values": [{i: 10, "type" : class name of class AChild1 implements/extends A}, {i: 20, anotherSubClassOfAField: 25, "type" : class name of class AChild2 implements/extends A}],
"mapvalues" : {"val1" : "hello", "val2" : [{j: 30, "type": class name of class BChild1 implements/extends B}, {j: 10, anotherSubClassOfBField: "Hello", "type" : class name of class BChild2 implements/extends B}]},
"name" : "Test",
"type": class name of parent object which I already know.
}

到目前为止我做了什么?
如前所述,我知道父类的类名,如果我将对象转换为一个Map,迭代它的键,得到的值可以是一个原语列表、一个对象列表、一个Map,而键是所有对象的字符串值,我可以通过递归遍历它,直到找不到最里面的对象。另外,从好的方面来说,如果找到一个对象,我也可以很容易地知道它的类。因此,我可以知道父对象中所有对象的类,但我必须遍历转换为贴图的父对象。
遇到一个对象后,我将其转换为一个Map,然后再次重复上述相同的过程,完成所有操作后,我将类型字段添加到该对象中。
所以,最后,我将有一个Map对象,我只需要使用对象Map器将其转换为json并发送到客户端。
但是,这种递归方法似乎太琐碎了。我知道还有一个jsonserializer。我看到很多帖子都在使用它,但都提到在json响应中的对象中添加一个具有相同值的额外字段。
我有没有办法用它来实现它?
p、 s:blazeds中也存在类似的功能。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题