セッションシリアライザー

Estimated reading time: 1 minute

シリアライザー

カスタムのシリアライザーを以下のように指定できます:

application.install(Sessions) {
    cookie<MySession>("SESSION") {
        serializer = MyCustomSerializer()
    }
} 

どのシリアライザも指定しない場合、内部的な最適化されたフォーマットが利用されます。

SessionSerializerReflection

これはどのシリアライザも指定されなかった場合のデフォルトのシリアライザです:

cookie<MySession>("SESSION") {
    serializer = autoSerializerOf()
}

カスタムシリアライザ

Sessions APIはSessionSerializerインターフェースを提供し、以下のようになります:

interface SessionSerializer {
    fun serialize(session: Any): String
    fun deserialize(text: String): Any
}

このインターフェースは汎用的なシリアライザ用であり、以下のようにインストールできます:

cookie<MySession>("NAME") {
    serializer = MyCustomSerializer()
}

そのため例えば、Gsonを使ったJSONセッションシリアライザを作成することができます:

class GsonSessionSerializer(
    val type: java.lang.reflect.Type, val gson: Gson = Gson(), configure: Gson.() -> Unit = {}
) : SessionSerializer {
    init {
        configure(gson)
    }

    override fun serialize(session: Any): String = gson.toJson(session)
    override fun deserialize(text: String): Any = gson.fromJson(text, type)
}

そして設定できます:

cookie<MySession>("NAME") {
    serializer = GsonSessionSerializer(MySession::class.java)
}