Jam*_*hen 2 scala playframework playframework-2.0 playframework-2.1
我正在尝试读取可能具有来自客户端的以下参数的JSON
{
"email" : "foobar@gmail.com",
"password" : "XXXX",
"facebookToken": "XXXXXXXXXXX"
}
Run Code Online (Sandbox Code Playgroud)
该facebookToken可能是空或不存在,在这种情况下,电子邮件/密码应填,反之亦然.
我在构建这个阅读器时遇到了麻烦,这是我到目前为止所做的:
val loginEmail = (
( __ \ "email").read[String] and
( __ \ "password").read[String]
)((email: String, password: String) => new User(email, password))
val loginFacebook = (
( __ \ "facebookToken").read[String]
)((facebookToken : String) => new User(facebookToken))
val loginReader(RequestBodyJson) = (
(RequestBodyJson).read[User](loginEmail) or
(RequestBodyJson).read[User](loginFacebook)
)
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何正确地做到这一点?
我还希望它返回带有自定义消息的JSError.例如,如果FacebookToken不存在,并且电子邮件出现问题("电子邮件无效")而不是"/ facebookToken path not found"一般错误.
你可以使用这个技巧:
import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.data.validation.ValidationError
....
(__ \ "facebookToken").read[String].orElse(Reads(_ => JsError(ValidationError("custom-error"))))
Run Code Online (Sandbox Code Playgroud)
如果主读取器失败,您可以返回自定义JsError.
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |