dea*_*mon 7 java validation ajax json playframework
我想构建一个应用程序,通过Ajax提交表单,而无需重新加载页面.要显示服务器端验证错误,服务器应将验证错误作为JSON和适当的HTTP状态返回(400).
我怎样才能通过Play实现这一目标!框架?
你在寻找比这更复杂的东西:
public static void yourControllerMethod() {
... // your validation logic
if (validation.hasErrors()) {
response.status = 400;
renderJSON(validation.errors);
}
}
Run Code Online (Sandbox Code Playgroud)
在Play Framework 2.x和Scala中,您可以使用以下示例:
import play.api.libs.json._
case class LoginData(email : String, password: String)
implicit object FormErrorWrites extends Writes[FormError] {
override def writes(o: FormError): JsValue = Json.obj(
"key" -> Json.toJson(o.key),
"message" -> Json.toJson(o.message)
)
}
val authForm = Form[LoginData](mapping(
"auth.email" -> email.verifying(Constraints.nonEmpty),
"auth.password" -> nonEmptyText
)(LoginData.apply)(LoginData.unapply))
def registerUser = Action { implicit request =>
authForm.bindFromRequest.fold(
form => UnprocessableEntity(Json.toJson(form.errors)),
auth => Ok(Json.toJson(List(auth.email, auth.password)))
)
}
Run Code Online (Sandbox Code Playgroud)
我看到这个问题用java标签标记,但我想这对Scala开发人员可能有用.
为了对您的请求执行服务器端验证,Play框架提供了一个内置验证模块,该模块使用了Hibernate Validator.
假设您有一个与传入请求相对应的POJO类,
import play.data.validation.Constraints;
public class UserRequest{
@Constraints.Required
private String userName;
@Constraints.Required
private String email;
}
Run Code Online (Sandbox Code Playgroud)
可以如下从控制器执行请求验证.
public class UserController extends Controller{
Form<UserRequest> requestData = Form.form(UserRequest.class).bindFromRequest();
if(requestData.hasErrors()){
return badRequest(requestData.errorsAsJson());
} else{
//... successful validation
}
}
Run Code Online (Sandbox Code Playgroud)
如果请求未通过验证,将生成以下响应.
{
"userName": [
"This field is required"
],
"email": [
"This field is required"
]
}
Run Code Online (Sandbox Code Playgroud)
除此之外,您还可以将多个约束应用于类字段.他们之中有一些是,
| 归档时间: |
|
| 查看次数: |
3993 次 |
| 最近记录: |