gpt4 book ai didi

java - RestController 的抽象类自定义反序列化

转载 作者:行者123 更新时间:2023-12-01 17:00:44 25 4
gpt4 key购买 nike

我有一个抽象类PluginTemplate,由3个子类继承

PluginTemplateA、PluginTemplateB、PluginTemplateC

我有一个其他类,其中有一个包含 PluginTemplate 列表的 map 。

    @JsonDeserialize(using = PluginDeserializer.class)
public class PluginContainer {
// map stores enum to template list mapping, enum can be used to identify template type
Map<PluginTemplateEnum, List<PluginTemplate>> pluginTemplatesList;
other variables....
}

我在发布请求时将 PluginContainer 对象发送到使用 RestController 的其他服务

    @RequestMapping(value = "/plugin/generateDetails", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public String generateDetails(@PathVariable Long interfaceId, @RequestBody List<PluginContainer> containers) throws Exception {
// other code
}

我知道要发送 json,我需要一个用于抽象类 PluginTemplate 的自定义 json 反序列化器。

我已经开始编写一个像这样的 json 反序列化器

public class PluginDeserializer extends JsonDeserializer<PluginContainer> {
@Override
public PluginContainer deserialize(JsonParser jp, DeserializationContext context) throws IOException, JsonProcessingException {
// what should I write here
}
}

我应该如何使用Map键值识别PluginContainer的类型,并在此方法中相应地反序列化它。

最佳答案

迭代 TreeNode 键或使用 TreeNode.get 直接获取值 (TreeNode)

 public PluginContainer deserialize(JsonParser jp, DeserializationContext context) throws IOException, JsonProcessingException {
TreeNode treeNode = jp.getCodec().readTree(jp);
Iterator<String> nameItr = treeNode.fieldNames();
while(nameItr.hasNext()) { //Iteratae Over keys
String key = nameItr.next();
}
//or you can just get the required value for key
//i.e.
treeNode.get("fieldName");

}

关于java - RestController 的抽象类自定义反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61507983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com