data class Sample(
val id: Int,
val name: String,
val type: Sample.SomeType
) {
enum class SomeType(val type: String) {
A("alpha"),
B("beta")
}
}
このような Enum をプロパティに持つデータクラスのインスタンスを Jackson で JSON にシリアライズすると、次のように定数名がそのまま文字列として出力される。
{
"id" : 1,
"name" : "Sample Name",
"type" : "A"
}
これを定数名ではなく、その値(上の例では "alpha"
)を出力したい場合には @JsonValue
アノテーションを用いたメソッドを追加する。
Enum に限らず、自作クラスのオブジェクトに対する JSON シリアライズ時の値を決めるには @JsonValue
アノテーションを付けたメソッドを実装する。
import com.fasterxml.jackson.annotation.JsonValue
data class Sample(
val id: Int,
val name: String,
val type: Sample.SomeType
) {
enum class SomeType(val type: String) {
A("alpha"),
B("beta");
@JsonValue
fun toValue(): String {
return type
}
}
}
ここでは toValue()
という名前のメソッドを追加しているが、@JsonValue
アノテーションが付いていればメソッド名は何でもよい。