我有一个抽象类PluginTemplate
,由3个子类继承PluginTemplateA, PluginTemplateB, PluginTemplateC
。
我有一些其他类具有包含PluginTemplate列表的映射。
@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
直接获取Value(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/