Есть ли способ сообщить Джексону библиотеке, какую реализацию Map использовать во вложенном объекте?
У меня есть карта, расширенная из HashMap, меня не волнует порядок полей:
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)) {
log.warn("Query unknown field " + field);
}
return value;
}
}
И ObjectMapper.readValue()
возвращает этот класс:
final TypeReference<FieldsMap<String, Object>> mapType =
new TypeReference<FieldsMap<String, Object>>() {};
Map<String, Object> res = new ObjectMapper().readValue("{\"a\": {\"b\": 0}}", mapType);
res.get("c"); // warning
Но вложенный объект всегда LinkedHashMap
:
System.out.println(res.get("a").getClass().getName()); // java.util.LinkedHashMap
((Map)res.get("a")).get("c"); // no warning
Это будет полезно в тестовых средах.