score:0

i archived similar goal by using implicit class for actionbuilder:

trait actionbuilderimplicits {

  implicit class exactionbuilder[p](actionbuilder: actionbuilder[request, p])(implicit cc: controllercomponents) {

    def validatejson[a](implicit executioncontext: executioncontext, reads: reads[a]): actionbuilder[request, a] = {
      actionbuilder(cc.parsers.tolerantjson.validate(jsvalue => {
        jsvalue.validate.aseither.left
          .map(errors => badrequest(jserror.tojson(errors)))
      }))
    }
  }

}

object actionbuilderimplicits extends actionbuilderimplicits

then in controller you can import actionbuilderimplicits and use it as

action.validatejson[a].async { request =>
   processingservice.process(request.body)
}

here is request.body already type of a


Related Query

More Query from same tag