最初に
シリアライズでも少しハマったから書く。
シリアライズのやりかた
ObjectMapper#writeValueAsStringを使う。
Stringにしか変換できない。ObjectNodeに変換しようとすると一手間かかる。
String mapper = new ObjectMapper().writeValueAsString(test);
引っかかる
やっぱりなんかハマる。
オブジェクトのメンバがprivate変数だと取れない
そんなんらしい。ちなみに↓みたいなエラーが出る。
RuntimeException: org.codehaus.jackson.map.JsonMappingException: No serializer found for class
補足:
publicな変数にするか、getter/setterを書けば問題なく通る。
annotation入れてるとエラーが出ないことがある
例えばデシリアライズに使ったJsonIgnorePropertiesをtrueにしてると空のデータが返ってくるだけ、とか言う状態になる。
@JsonIgnoreProperties(ignoreUnknown=true)
補足:
この設定を入れないとフィールドの削減を行った際にエラーになってしまうため、使いようによってはマストになる設定ではあるが、初期開発時にはトラブルの元になるので十分注意すること。
つまり
jsonでやりとりする可能性のあるオブジェクトはメンバをpublicな変数として記述するか、独自でtoJson()メソッドを定義するとかしないといけない(多分)。
ObjectNodeで色々やりたい場合はそっちの方がいいのかもしれない。