JsonNodeをPOJOに変換する。
これは少し珍しいかもしれませんが、私は JsonNode
を POJO
に変換/マッピングする効率的な方法を探しています。
私はモデルの情報をjsonファイルに保存しており、モデルのいくつかのバージョンをサポートする必要があります。
私が行っているのは、JsonNodeでjsonファイルをメモリ上にロードし、いくつかのバージョニング戦略を適用して、それをモデルの最新バージョンに一致させることです。
ObjectMapper mapper = new ObjectMapper();
BufferedReader fileReader = new BufferedReader(new FileReader(projPath));
JsonNode rootNode = mapper.readTree(fileReader);
//Upgrade our file in memory
applyVersioningStrategy(rootNode);
ProjectModel project = mapJsonNodeToProject(rootNode);
もっと早くできる方法がない限り、結局は手動で JsonNodes
を Model に適用することになるでしょう。
132
4
ジャクソン2.4では、次のように変換できます。
ここで、「jsonObjectMapper」はジャクソンの「ObjectMapper」です。
---。
ジャクソンの古いバージョンでは、そうなります。
これなら大丈夫でしょう:
バッファードリーダーではなく、文字列で使用しているため、そのような表現になりましたが、それでも動作するはずです。
以下は私のコードです:
以下は、その呼び出しに関する公式ドキュメントです:http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class) です。
また、
ObjectMapper
をインスタンス化する際に、カスタムデシリアライザを定義することもできる: http://wiki.fasterxml.com/JacksonHowToCustomDeserializers編集する: もう一つ思い出したことがあります。入力されたオブジェクトが
POJO
が持つ以上のプロパティを持ち、余分なものを無視したい場合は、これを設定する必要があります:または、設定するプロパティが見つからないというエラーが出ます。
org.codehaus.jacksonを使用している場合、1.6から可能になっています。JsonNodeをPOJOに変換するには、
ObjectMapper#readValue
: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode, java.lang.Class) を使ってください。JSON入力がPOJOの持つプロパティよりも多く、Jackson 2.4の余分なものを無視したい場合、ObjectMapperを次のように設定することができます。**この構文は、古いJacksonのバージョンとは異なっています。