tyr*_*dis 8 java json jackson json-deserialization
鉴于我自己的数组实现MyArray<T>,如何让Jackson知道它,以便它能够从JSON数组反序列化为MyArray<T>?到目前为止,我只得到这个例外:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of MyArray out of START_ARRAY token
Run Code Online (Sandbox Code Playgroud)
Array正如 Dariusz 提到的,利用类具有接受普通数组的构造函数这一事实是很好的。
看,如果您使用默认序列化程序 - 序列化为 JSON 的数组将如下所示:
{"items":["item1","item2"],"size":2,"ordered":true}
Run Code Online (Sandbox Code Playgroud)
这显然是浪费空间,除非你想保留字段size。ordered
我建议您更改序列化对象的方式,使其看起来更像普通数组,但另一方面 - 反序列化可以Array再次构建对象。
如果添加以下一对序列化器和反序列化器:
SimpleModule module = new SimpleModule();
module.addDeserializer(Array.class, new StdDelegatingDeserializer<>(
new StdConverter<Object[], Array>() {
@Override
public Array convert(Object[] value) {
return new Array(value);
}
}));
module.addSerializer(Array.class, new StdDelegatingSerializer(
new StdConverter<Array, Object>() {
@Override
public Object convert(Array value) {
return value.toArray();
}
}));
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
Run Code Online (Sandbox Code Playgroud)
您将在这些类型之间进行透明的转换
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |