【发布时间】:2014-10-11 10:32:44
【问题描述】:
我正在使用 Spring MVC,并且 spring 负责将 json 转换为控制器中的对象。但我的 json 结构与类结构不同。所以我写了自己的反序列化器。但是我在访问 JSON 中的父对象的值时遇到了问题。我认为最好用一些例子来解释我的问题 -
我有以下 JSON 来反序列化
{
id: 1,
children: {
"name1": "value1",
"name2": "value2"
}
}
我有以下课程(示例代码) -
public class Parent {
private Integer id;
@JsonDeserialize(using= ChildrenDeserializer.class)
private List<Child> children;
//... Getter/setters
}
public class Child {
private Integer id;
private String name;
private String value;
//...getters/setters
}
public class ChildrenDeserializer extends JsonDeserializer<List<Child>> {
@Override
public List<Child> deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
List<Child> children = new ArrayList<>();
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
Iterator<Map.Entry<String, JsonNode>> fieldsIterator = node.fields();
while (fieldsIterator.hasNext()) {
Map.Entry<String, JsonNode> field = fieldsIterator.next();
String name = field.getKey();
String value = field.getValue().textValue();
Child child = new Child();
//Here I want to get parentId from the Json. Is it possible??
Integer childId = childRepository.searchChildIdByParentId(parentId, name);
child.setId(childId);
child.setName(name);
child.setValue(value);
children.add(child);
}
return children;
}
}
有没有办法在反序列化子代时获取 parentId(上例中为 1)??
【问题讨论】:
-
既然你正在编写整个反序列化器,为什么不跳过自动的东西并反序列化父级。然后您可以将
id(或父级)传递给您的子反序列化方法。 -
感谢您的回复。我现在已经这样做了,并且工作正常。但仍然想知道是否有任何方法可以使用父对象的默认反序列化器获取父对象。因为父级中有很多属性,默认的反序列化器在那里可以正常工作。
标签: java spring jackson json-deserialization