Джексон: десериализация в коллекцию - PullRequest
2 голосов
/ 03 марта 2011

У меня есть конкретная проблема с десериализацией JSON.Давайте получим такую ​​структуру JSON:

{
  "header":{
    "objects":[
      {"field":"value1"},
      {"field":"value2"}
    ]
  }
}

Структура JSON не может быть изменена, поскольку она поступает из сторонней системы.

Теперь давайте создадим простой POJO:

@JsonDeserialize(using=PojoDeserializer.class)
public class Pojo {
    private string field;

    //...getter, setter
}

Упомянутый PojoDeserializer принимает строку json {"field": "value"} и десериализует ее в экземпляр Pojo.Поэтому я могу просто выполнить десериализацию следующим образом:

Экземпляр Pojo = новый ObjectMapper (). ReadValue ("{\" field \ ": \" value \ "}", Pojo.class);

А вот и моя проблема.Давайте возьмем другой десериализатор PojosCollectionDeserializer, который берет упомянутую структуру и десериализует ее в коллекцию экземпляров Pojo.Я хотел бы использовать его аналогично предыдущему примеру:

Collection<Pojo> pojos = new ObjectMapper().readValue("{...}", Collection.class);

Но это не работает, поскольку не определено, что Collection следует создавать с использованием PojosCollectionDeserializer.Есть ли способ добиться этого?

1 Ответ

2 голосов
/ 04 марта 2011

Я не уверен, почему пытаюсь явно указать десериализаторы, так как все это будет нормально работать с чем-то вроде:

public class Message {
    public Header header; // or, if you prefer, getter and setter
}
public class Header {
    public List<Pojo> objects;
}
public class Pojo {
    public String field;
}

Message msg = objectMapper.readValue(json, Message.class);

без каких-либо дополнительных настроек или аннотаций. Для таких простых случаев нет необходимости создавать собственные сериализаторы или десериализаторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...