Java 重头戏2.3验证Json请求正文
我试图通过在请求体中发送json并将json转换为pojo对象来使用pojo对象中的验证注释。我想做的是让使用这个json的服务在对象无效时返回一个错误的请求。有人知道怎么做吗?我已经看过很多教程,展示了如何使用注释进行表单验证,但是仅仅是一个简单的json请求呢 POJO对象:Java 重头戏2.3验证Json请求正文,java,json,validation,playframework-2.0,Java,Json,Validation,Playframework 2.0,我试图通过在请求体中发送json并将json转换为pojo对象来使用pojo对象中的验证注释。我想做的是让使用这个json的服务在对象无效时返回一个错误的请求。有人知道怎么做吗?我已经看过很多教程,展示了如何使用注释进行表单验证,但是仅仅是一个简单的json请求呢 POJO对象: import play.data.validation.Constraints.*; public class TestObject { @Required @Min(0) public I
import play.data.validation.Constraints.*;
public class TestObject {
@Required
@Min(0)
public Integer testInt;
public Integer getTestInt() {
return testInt;
}
public void setTestInt(Integer testInt) {
this.testInt = testInt;
}
}
我可能会通过解析json来查看每个元素,并以这种方式进行验证,但这似乎很荒谬
import models.Domain;
import play.libs.Json;
import play.mvc.BodyParser;
import play.mvc.Controller;
import play.mvc.Result;
import com.fasterxml.jackson.databind.JsonNode;
public class TestController extends Controller {
@BodyParser.Of(value = BodyParser.Json.class, maxLength = 10 * 1024)
public static Result create() {
JsonNode json = request().body().asJson();
TestObject testObject = Json.fromJson(json, TestObject.class);
//would like to validate the object here, based on annotations
//in the bean object...
//only if the object is valid, return ok...
return ok(json);
}
}
这就是我要做的
@BodyParser.Of(value = BodyParser.Json.class, maxLength = 10 * 1024)
public static Result create() {
JsonNode json = request().body().asJson();
//this is not neccessary for validation except maybe to be sure the json can be
//mapped back to pojo before validating then you'll have to wrap
//this statement in a try catch so you can recover from any errors during mapping
//TestObject testObject = Json.fromJson(json, TestObject.class);
Form<TestObject> testObjectForm = Form.form(TestObject.class);
Form<TestObject> testObjForm = testObjectForm.bind(json);
if(testObjForm.hasErrors){
doStuff()
}else{
return ok(json);
}
}
@BodyParser.Of(value=BodyParser.Json.class,maxLength=10*1024)
公共静态结果创建(){
JsonNode json=request().body().asJson();
//这对于验证来说不是必需的,只是为了确保json可以
//在验证之前映射回pojo,然后必须包装
//在try-catch中使用此语句,以便您可以从映射期间的任何错误中恢复
//TestObject TestObject=Json.fromJson(Json,TestObject.class);
formtestobjectform=Form.Form(TestObject.class);
表单testObjForm=testObjectForm.bind(json);
if(testObjForm.hasErrors){
多斯塔夫()
}否则{
返回ok(json);
}
}
谢谢和平
因为Play 2.5Form.Form(…)
已被弃用
以下是您现在应该如何操作:
private FormFactory formFactory;
@Inject
YourContructor(FormFactory formFactory){
this.formFactory
}
@BodyParser.Of(value = BodyParser.Json.class, maxLength = 10 * 1024)
public static Result create() {
JsonNode json = request().body().asJson();
Form<TestObject > TestObjectValidationForm = formFactory.form(TestObject .class)
.bind(json);
if(TestObjectValidationForm .hasErrors())
return badRequest("Invalid");
TestObject testObject = Json.fromJson(json, TestObject.class);
//only if the object is valid, return ok...
return ok(json);
}
private-FormFactory-FormFactory;
@注入
承包商(FormFactory FormFactory){
这是一家制版厂
}
@BodyParser.Of(value=BodyParser.Json.class,maxLength=10*1024)
公共静态结果创建(){
JsonNode json=request().body().asJson();
表单TestObjectValidationForm=formFactory.Form(TestObject.class)
.bind(json);
if(TestObjectValidationForm.hasErrors())
返回请求(“无效”);
TestObject TestObject=Json.fromJson(Json,TestObject.class);
//仅当对象有效时,返回ok。。。
返回ok(json);
}
不管怎样,我真的不喜欢用表格来做。。。没有更好的选择了