【发布时间】:2020-04-14 20:52:21
【问题描述】:
我正在处理一个 JSON,它看起来像这样:
"locale": {
"__type": "com.package1.package2.className",
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
之前,我曾经得到以下 JSON:
"locale": {
"@class": "com.package1.package2#<className>",
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
现在,在下游服务中发生更改之前,我能够反序列化 json 并将这些值映射到类,但现在由于 @class 已替换为 __type,反序列化器无法正常工作。
如何将 __type 转换为 @class。
我不想使用替换功能,因为 JSON 比上面显示的要复杂得多,也因为它非常 hacky。有没有一个图书馆可以自己做到这一点?我无法控制收到的 JSON。
我不想为此编写自己的 POJO,因为它已经在不同的包中可用,但它的参数是 className 而不是 __type。
【问题讨论】:
-
不是答案,只是为了检查。您有准备反序列化的类的白名单,对吗?不只是任何你无法控制的 JSON 请求的任意类?
-
是 __type 只包含简单的类名吗?例如日期? (而不是例如 java.util.Date)。如果是这样,那么整个事情是不可能的,因为您的类路径上可能有许多具有相同简单名称的类
-
@RichardTingle 是的,我有想要反序列化的
。 -
@RichardTingle __type 包含整个类路径。已更新问题以反映相同的情况。
-
你能在这里分享你的 POJO
标签: java json serialization jackson deserialization