カスタムのシリアライザーを以下のように指定できます:
application.install(Sessions) {
cookie<MySession>("SESSION") {
serializer = MyCustomSerializer()
}
}
どのシリアライザも指定しない場合、内部的な最適化されたフォーマットが利用されます。
これはどのシリアライザも指定されなかった場合のデフォルトのシリアライザです:
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)
}