LoginSignup
1
0

More than 5 years have passed since last update.

Jackson で Enum の JSON シリアライズ結果をカスタマイズする

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0