Circe support for playframework
How to get it
- Add dependency
For play 2.6.x
libraryDependencies += "com.dripower" %% "play-circe" % "2612.0"
For play 2.7.x
libraryDependencies += "com.dripower" %% "play-circe" % "2712.0"
For play 2.8.x
libraryDependencies += "com.dripower" %% "play-circe" % "2812.1"
Usage
package play.api.libs.circe
import io.circe.generic.auto._
import io.circe.syntax._
import play.api._
import play.api.mvc._
class CirceController(val controllerComponents: ControllerComponents) extends BaseController with Circe {
case class Bar(bar: Int)
case class Foo(foo: String, bar: Bar)
val bar = Bar(1)
val foo = Foo("foo", bar)
//serve json
def get = Action {
Ok(foo.asJson)
}
//parse json to case class
def post = Action(circe.json[Foo]) { implicit request =>
val isEqual = request.body == foo
Ok(isEqual.toString)
}
def postJson = Action(circe.json) { implicit request =>
val isEqual = request.body == foo.asJson
Ok(isEqual.toString)
}
def postTolerate = Action(circe.tolerantJson[Foo]) { implicit request =>
val isEqual = request.body == foo
Ok(isEqual.toString)
}
def postTolerateJson = Action(circe.tolerantJson) { implicit request =>
val isEqual = request.body == foo.asJson
Ok(isEqual.toString)
}
}
FAQ
- If you want to customize the json output, you can provide an implicit
Printer
in scope (default isPrinter.noSpaces
):
import io.circe.Printer
implicit val customPrinter = Printer.spaces2.copy(dropNullValues = true)
- The
Circe
totally ignores the configuredHttpErrorHandler
and just usesDefaultHttpErrorHandler
. If this not what you want, simply make a trait to overridecirceErrorHandler
like this
class MyController @Inject() (val errorHandler: HttpErrorHandler, val controllerComponents: ControllerComponents) extends BaseController with Circe {
override def circeErrorHandler = errorHandler
}
Pre-push Git hook
There's one Git hook included. It's inside the hooks
folder and it will run the prep
SBT task before pushing to any remote.
This prep
task is intended to run all the checks you consider before pushing. At this very moment, it try to compile and check the code style rules with ScalaFmt.
In order to install this hook, just cd hooks
and run ./install-hooks.sh
.