首先要小心您的提示,它可能会导致您的代码出现拼写错误。我写了这个,这是可行的:
首先使用伴随对象的案例类
package models
import play.api.libs.json.{JsPath, Reads}
import play.api.libs.functional.syntax._
import play.api.libs.json.Reads._
/**
* Created by anquegi on 06/05/15.
*/
case class SignUpValidation(firstNname : String,
var lastName: String,
var email: String,
var secondryEmail : Option[String] ){
}
object SignUpValidation {
implicit val SignUpValidationReads: Reads[SignUpValidation] = (
(JsPath \ "firstname").read(minLength[String](1)) and
(JsPath \ "lastname").read(minLength[String](1)) and
(JsPath \ "email").read(email) and
(JsPath \ "secondryemail").readNullable(email)
)(SignUpValidation.apply _)
}
然后是控制器中的 POST 方法
package controllers
import models.SignUpValidation
import play.api.libs.json.{JsError, Json}
import play.api.mvc._
object Application extends Controller {
def index = Action {
Ok("Play Framework Scala Stack OverFlow")
}
def testSignUpValidation = Action(BodyParsers.parse.json) { request =>
val signup = request.body.validate[SignUpValidation]
signup.fold(
errors => {
BadRequest(Json.obj("status" ->"KO", "message" -> JsError.toFlatJson(errors)))
},
signupObj => {
Ok(Json.obj("status" ->"OK", "message" -> ("signup "+signupObj.toString) ))
}
)
}
在路由中使用 URL:
POST /testsignupvalidation controllers.Application.testSignUpValidation
我使用 curl 和来自用户 Barry 的 JSON 来测试它:
[anquegi@localhost ~]$ curl --include --request POST --header "Content-type: application/json" --data '{"firstname":"bob","lastname":"frank","email":"bob@gmail.com"}' http://localhost:9000/testsignupvalidation
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 81
{"status":"OK","message":"signup SignUpValidation(bob,frank,bob@gmail.com,None)"}
[anquegi@localhost ~]$ curl --include --request POST --header "Content-type: application/json" --data '{ "firstname":"bob", "lastname":"frank", "email":"bob@gmail.com", "secondryemail":"bob2@gmail.com" }' http://localhost:9000/testsignupvalidation
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 97
{"status":"OK","message":"signup SignUpValidation(bob,frank,bob@gmail.com,Some(bob2@gmail.com))"}
注意secondryemail 和secondaryemail
当它是一个空字符串时,您不应该提交 secondryemail,否则它将被邮件验证器失败,如下所示:
[anquegi@localhost ~]$ curl --include --request POST --header "Content-type: application/json" --data '{ "firstname":"bob", "lastname":"frank", "email":"bob@gmail.com", "secondryemail":"" }' http://localhost:9000/testsignupvalidation
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 81
{"status":"KO","message":{"obj.secondryemail":[{"msg":"error.email","args":[]}]}