社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

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 以外のアノテーションも試してみたい。