2

JSONデシリアライゼーションにこの特定の問題があります。この JSON 構造を考えてみましょう。

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

JSON 構造は、サード パーティ システムからのものであるため、変更できません。

それでは、この単純な POJO を作成してみましょう。

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

    //...getter, setter
}

上記の PojoDeserializer は {"field": "value"} json 文字列を取り、それを Pojo インスタンスにデシリアライズします。したがって、このように単純に逆シリアル化を行うことができます

Pojo インスタンス = new ObjectMapper().readValue("{\"field\": \"value\"}", Pojo.class);

そして、ここに私の問題があります。上記の構造を取り、それを Pojo インスタンスの Collection にデシリアライズする別のデシリアライザ PojosCollectionDeserializer を用意しましょう。前の例と同様の方法で使用したいと思います。

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

しかし、PojosCollectionDeserializer を使用して Collection を作成する必要があると定義されていないため、これは機能しません。それを達成する方法はありますか?

4

1 に答える 1

2

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.

于 2011-03-04T18:04:42.623 に答える