Jackson の JsonSetter は便利なのか試してみる
普段は JSON の取り扱いには GSON を使っていて、特に不便は感じていませんが
今回はお試しで Jackson を使ってみました。
概要
JsonSetter は JSON の読み込み時に使います。
読み取るJSONに、エンティティのフィールドがすべて含まれていなくても読み込んでくれます。
使い方
1. エンティティの定義
こんな感じで、@JsonSetter 付きでセッターを定義します。
public class JsonSetterExample { private int key; private String name; private String memo; @JsonSetter("key") public void setKey(int key) { this.key = key; } @JsonSetter("name") public void setName(String name) { this.name = name; } @JsonSetter("memo") public void setMemo(String memo) { this.memo = memo; } }
2. 読み取り
読み取るときは、ObjectMapper オブジェクトの readFor を使います。
定義したエンティティクラスを指定し、対象の json を readValue で読み取ります。
※ 各ゲッターは上記とは別に定義しています
@Test public void test() throws JsonProcessingException, IOException { String json = "{\"key\":10,\"name\":\"my name\"}"; JsonSetterExample entity = new ObjectMapper().readerFor(JsonSetterExample.class).readValue(json); assertThat(entity.getKey(), is(10)); assertThat(entity.getName(), is("my name")); assertTrue(entity.getMemo() == null); }
感想
Gsonでは private フィールドを自動的に保存してくれるので、ゲッターやセッターは不要。
Jackson では ゲッターやセッターを定義しないといけない分 ? 今のところ、メリットは感じられなかった。
普通に使う分には分かり易い動作だと思います。
また、JsonSetter 以外のアノテーションも試してみたい。