@JsonAnyGetterについて
@JsonAnyGetterアノテーションにより、Mapフィールドを標準プロパティとして柔軟に使用することができるようになります。
使用例
例えば、TestBeanエンティティは、nameプロパティとkey/valueのペア形式で拡張可能な属性のセットをもっています。
public class TestBean { public String name; private Map<String, String> properties; @JsonAnyGetter public Map<String, String> getProperties() { return properties; } }
このエンティティのインスタンスをシリアル化すると、MapのすべてのKey Valueが標準のプレーンなプロパティとして取得されます。
{
“name”:”Mr. bean”,
“attr2″:”val2”,
“attr1″:”val1”
}
このエンティティのシリアル化は、実際には次のようになります。
@Test public void whenSerializingUsingJsonAnyGetter_thenCorrect() throws JsonProcessingException { TestBean bean = new TestBean(“Mr. bean”); bean.add(“attr1”, “val1”); bean.add(“attr2”, “val2”); String result = new ObjectMapper().writeValueAsString(bean); assertThat(result, containsString(“attr1”)); assertThat(result, containsString(“val1”)); }
また、オプションの引数enabledをfalseにすることで、@JsonAnyGetter()を無効にすることができます。
この場合、MapはJsonとして変換され、シリアライズ後にproperites変数の下に表示されます。