JPA, Джексон десериализует JSON в Hashmap, результат пустой

#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 (ов). Или?