失敗は一時の恥

パッケージソフト開発をしているプログラマが気の赴くままに何かを投稿するブログ.

Java で空の JSON を作る

Java で空の JSON を作る

概要

Java でテストのために空の JSON {} を作ろうとしてちょっと悩んだのでその備忘録.

空の JSON が必要なら,単純に "{}" と書けばいいじゃないかとも思いますが,何かしらのオブジェクトを ObjectMapper を介してシリアライズしなければいけないというシチュエーションだったのです.

作り方

まず JSON にすべき空のクラスを用意しておきます.

public class EmptyClass {}

ObjectMapper#disable(SerializationFeature) メソッドを使う

JSON を生成する ObjectMapper にインスタンスを直接触れられるならば,

objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
objectMapper.writeValueAsString(new EmptyClass());

で OK です.

そもそも,空のクラスをシリアライズしようとすると次のような例外が出るので,これがすぐに見つかる解決策です.

com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class EmptyClass and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )

@JsonSerialize アノテーションを使う

ObjectMapper のインスタンスに直接触れられない場合 (ライブラリやフレームワークの奥の方で ObjectMapper が使われている等),上述の方法は使えません. ライブラリやフレークワークに「この ObjectMapper 使ってね」みたいなことができればそれでもいいですが,シリアライズされる側のクラスにアノテーション @JsonSerialize を付けてしまうことでも解決できます.

@JsonSerialize
public class EmptyClass {}

おまじない感は少々あります.

参考