Akka HTTPでJacksonを使ってJSON変換をする

Akka HTTPではspray-jsonを使用するモジュールが提供されており、これを使用することでJSONで受け取ったリクエストをオブジェクトに変換したり、戻り値として返却したオブジェクトをJSONとしてレスポンスすることができます。

takezoe.hatenablog.com

が、spray-jsonJSON変換を行うにはオブジェクトの型に対応したFormatを定義しておかなくてはなりません。これがまあまあ面倒なのでJacksonを使ってリフレクションでズルをするためのMarshallerUnmarshallerを作ってみました。

まずはbuild.sbtに以下の依存関係を追加します。

libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.7.2"

MarshallerUnmarshallerの実装は以下のような感じです。

gist.github.com

以下のようにインポートしておけばOKです。

import com.github.takezoe.akka.http.jackson.JacksonSupport._

個人的にJSONに関してはどうせ一度テキストになるので、いちいちFormat書かずにリフレクションで変換しちゃえばいいんじゃないかなぁと思っているのですが、リフレクションだと型情報を取れないケースもあって結局メタデータ的なアノテーションをつけないといけなかったりするのでどっちもどっちかもしれません。

追記:折角なのでライブラリとして使えるようにしてみました。

github.com