#java #json #jackson
#java #json #джексон
Вопрос:
У меня проблема с десериализацией содержимого JSON в HashMap. У меня есть следующий JSON для анализа:
{"param":"p","infos":[{"b":2,"a":1}]}
Вот мой класс сущности:
@JsonDeserialize(using = ArrayMapDeserializer.class)
@ElementCollection(fetch=FetchType.EAGER)
@MapKeyColumn(name="infoKey")
@Column(name="infoValue", length=400)
private Map<String, Integer> infos = new HashMap<>();
И вот ArrayMapDeserializer.java
public class ArrayMapDeserializer extends JsonDeserializer<Map<String, Integer>> {
@Override
public Map<String, Integer> deserialize(JsonParser jp, DeserializationContext context)
throws IOException {
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
if (jp.getCurrentToken().equals(JsonToken.START_OBJECT)) {
return mapper.readValue(jp, new TypeReference<HashMap<String, Integer>>() {
});
} else {
mapper.readTree(jp);
return new HashMap<>();
}
}
}
Проблема в том, что после проверки, правильно ли проанализирован объект в моей базе данных, карта остается пустой. Это выглядит так:
{"id":1,"param":"p","infos":{}}
Что я делаю не так?
Комментарии:
1. Быстрая догадка: разве это не должно быть
return mapper.readTree(jp);
вместоreturn new HashMap<>();
в вашемelse
предложении?2. Какой цели служат квадратные скобки в
.... "infos":[{"b":2,"a":1}] ...
? Они должны быть удалены илиprivate Map<String, Integer> infos = new HashMap<>();
изменены на список HasMap (ов). Или?