在我的代码中,我有:
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 新手,请充分教育我如何解决这个问题。
注意: 由于我的组织政策,第三方库的使用可能会受到限制。
我相信您正在使用 jackson 库中的 ObjectMapper。
所以你可以做类似的事情 -
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(mdata.toString()).iterator().next();
ModernCustomer modernCustomer = objectMapper.treeToValue(jsonNode, ModernCustomer.class);
此外,应该不需要配置 ObjectMapper,因为 ModernCustomer 是从 avro 模式自动生成的,因此理想情况下,在反序列化期间不应该出现任何未知属性的情况。