我正在使用play框架及其JSON解析器play.api.libs.json,我有一些用于执行JSON解析的case类。
我想验证请求json是有效还是无效,所以我想将isValidJson
方法添加到我的trait中,所有json请求的case类都扩展但我不知道如何将case类调用为{{1来自特质。
这是我的问题,我如何变成一个方法,将json和任何case类作为参数,如果json与case类匹配,则返回验证结果,或者不从下面的代码中返回?
Type
提前致谢
答案 0 :(得分:1)
您可以这样做:
def isValidRequest[T: Reads](implicit request: Request[JsValue]) =
request.body.asOpt[T].isDefined
然后您可以将其用作isValidRequest[Foo]
,如果Foo
的Reader可以正确读取请求正文中的json,它将返回true。另请注意,这是编译安全的,即如果您编写isValidRequest[Bar]
并且您没有在范围中定义Reads[Bar]
,那么它将无法编译。
虽然坦率地说,如果你的目标是用Bad Request
回击,那么在你的控制器中内联它可能更好。即:
def get() = Action { implicit request =>
request.body.asOpt[Foo].map(
doSomething(_)
.map(Ok("Great!")
.getOrElse(BadRequest)
}