将 JsonObject 转换为 Avro schema 自动生成的 Java 对象

问题描述 投票:0回答:1

在我的代码中,我有:

import com.google.gson.JsonObject;

final JsonObject mdata = niceservice.nicemethod();

nicemethod()
返回以下
JsonObject

{
    "Customer": {
        "name": "John Doe",
        "gender": "Male"
    },
    "AdditioanInfo": {
        "samplefield1": "sampleValue1",
        "samplefield2": "sampleValue2",
        "samplefield3": "sampleValue3",
        "SubAdditionalInfo": {
            "SubAdditionalInfo1": "SubAdditionalValue1",
            "SubAdditionalInfo2": "SubAdditionalValue2",
            "SubAdditionalInfo3": "SubAdditionalValue3",
            "SubSubInfo": {
                "SubSubInfo1" : "SubSubInfoValue1",
                "SubSubInfo2" : "SubSubInfoValue2",
                "SubSubInfo3" : "SubSubInfoValue3"
            }
        },
        "ExtraInfo": {
            "ExtraInfo1" : "Extravalue1",
            "ExtraInfo2" : "Extravalue2"
        }
    }
}

我在resource/meta-inf/avro文件夹中有一个avro模式文件。基于此架构文件,当我执行 mvn clean install 命令时,会自动生成一个类。 (我们称之为:ModernCustomer 类) ModernCustomer 类结构与上面的 json 相同。 所以我想使用 Nicemethod() 返回的 json 中的值动态初始化我的客户类

到目前为止,我已经尝试过:

final ObjectMapper objMapper = new ObjectMapper()
    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

ModernCustomer objc = objMapper.readValue(mdata.toString(), ModernCustomer.class));

但我认为这不是正确的方法,因为它没有做任何事情。考虑到我是 Java 新手,请充分教育我如何解决这个问题。

注意: 由于我的组织政策,第三方库的使用可能会受到限制。

java json spring-boot jackson avro
1个回答
0
投票

我相信您正在使用 jackson 库中的 ObjectMapper

所以你可以做类似的事情 -

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(mdata.toString()).iterator().next();

ModernCustomer modernCustomer = objectMapper.treeToValue(jsonNode, ModernCustomer.class);

此外,应该不需要配置 ObjectMapper,因为 ModernCustomer 是从 avro 模式自动生成的,因此理想情况下,在反序列化期间不应该出现任何未知属性的情况。

© www.soinside.com 2019 - 2024. All rights reserved.