开发者

Jackson: deserialization to a collection

开发者 https://www.devze.com 2023-02-14 11:45 出处:网络
I have this specific problem with JSON deserialization. Let\'s have this JSON structure: { \"header\":{

I have this specific problem with JSON deserialization. Let's have this JSON structure:

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

The JSON structure can't be altered as it comes from a 3rd party system.

Now let's have this simple POJO:

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

    //...getter, setter
}

The mentioned PojoDeserializer takes {"field": "value"} json string and deserializes it to the Pojo instance. So I can simply do the deserialization like this

Pojo instance = new ObjectMapper().readValue("{\"field\": \"value\"}", Pojo.class);

An开发者_C百科d here's my problem. Let's have another deserializer PojosCollectionDeserializer which takes the mentioned structure and deserializes it to a Collection of Pojo instances. I'd like to use it in a similar fashion as in the previous example:

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

But this doesn't work as there is not defined that Collection should be created using the PojosCollectionDeserializer. Is there any way to achieve it?


I am not sure why are trying to explicitly specify deserializers, as it would all work just fine with something like:

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);

without any additional configuration or annotations. There is no need to construct custom serializers or deserializers for simple cases like this.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号