Akka HTTPではspray-jsonを使用するモジュールが提供されており、これを使用することでJSONで受け取ったリクエストをオブジェクトに変換したり、戻り値として返却したオブジェクトをJSONとしてレスポンスすることができます。
が、spray-jsonでJSON変換を行うにはオブジェクトの型に対応したFormat
を定義しておかなくてはなりません。これがまあまあ面倒なのでJacksonを使ってリフレクションでズルをするためのMarshaller
とUnmarshaller
を作ってみました。
まずはbuild.sbt
に以下の依存関係を追加します。
libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.7.2"
Marshaller
とUnmarshaller
の実装は以下のような感じです。
以下のようにインポートしておけばOKです。
import com.github.takezoe.akka.http.jackson.JacksonSupport._
個人的にJSONに関してはどうせ一度テキストになるので、いちいちFormat
書かずにリフレクションで変換しちゃえばいいんじゃないかなぁと思っているのですが、リフレクションだと型情報を取れないケースもあって結局メタデータ的なアノテーションをつけないといけなかったりするのでどっちもどっちかもしれません。
追記:折角なのでライブラリとして使えるようにしてみました。