別のオプションに私の列挙型を渡す、標準的な方法を試してみました:使用するカスタム(デ)シリアライザーを使用name
の代わりにvalue
の列挙型を使用します(デフォルト)。つまり、すべての列挙値に注釈を付ける必要はなく、enumクラスに注釈を付けることができます(またはアダプタをGsonBuilder
に追加することもできます)。
interface HasValue {
val value: String
}
@JsonAdapter(EnumByValueAdapter::class)
enum class VehicleEnumEntity(override val value: String): HasValue {
CAR("vehicle"),
MOTORCYCLE("motorcycle"),
VAN("van"),
MOTORHOME("motorhome"),
OTHER("other")
}
class EnumByValueAdapter<T> : JsonDeserializer<T>, JsonSerializer<T>
where T : Enum<T>, T : HasValue {
private var values: Map<String, T>? = null
override fun deserialize(
json: JsonElement, type: Type, context: JsonDeserializationContext
): T? =
(values ?: @Suppress("UNCHECKED_CAST") (type as Class<T>).enumConstants
.associateBy { it.value }.also { values = it })[json.asString]
override fun serialize(
src: T, type: Type, context: JsonSerializationContext
): JsonElement = JsonPrimitive(src.value)
}
同じアダプタクラスは、他の列挙型クラスで再利用可能です。
somethinigを試してみましたか? – lelloman
@lellomanはい、私は標準的な方法を試して、ちょうど私の列挙型をPOJOに渡して、それは常にnullです – Drake
多分それはあなたの質問にそれを言及する価値があります – lelloman