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 アノテーションが付いていればメソッド名は何でもよい。