必须添加一个
抽象类型映射
对象映射器。这是通过一个模块完成的:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class FieldsMap<K, V> extends HashMap<K, V> {
@Override
public V get(Object field) {
V value = super.get(field);
if (value == null && !containsKey(field)) {
System.out.println("Query unknown field " + field);
}
return value;
}
public static void main(String [] args) throws IOException {
final TypeReference<FieldsMap<String, Object>> mapType = new TypeReference<FieldsMap<String, Object>>() {};
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule().addAbstractTypeMapping(Map.class, FieldsMap.class);
objectMapper.registerModule(module);
Map<String, Object> res = objectMapper.readValue("{\"a\": {\"b\": 0}}", mapType);
res.get("c");
System.out.println(res.get("a").getClass().getName());
((Map)res.get("a")).get("c");
}
}
这将指示Jackson使用您的自定义类型
FieldsMap
每一次
Map
是需要的。
输出为:
Query unknown field c
FieldsMap
Query unknown field c