Java 直接在模型上检查验证
我刚刚开始“玩”play framework(2.0),在寻找直接验证模型的解决方案时遇到了一些麻烦。我用谷歌搜索了这个问题,但找不到任何例子 在Rails中,您可以通过以下方式检查模型是否有效:my_model.valid 我只看到过一些示例,其中我可以验证控制器中的模型,但这不是我现在编写单元测试时想要做的Java 直接在模型上检查验证,java,playframework,playframework-2.0,Java,Playframework,Playframework 2.0,我刚刚开始“玩”play framework(2.0),在寻找直接验证模型的解决方案时遇到了一些麻烦。我用谷歌搜索了这个问题,但找不到任何例子 在Rails中,您可以通过以下方式检查模型是否有效:my_model.valid 我只看到过一些示例,其中我可以验证控制器中的模型,但这不是我现在编写单元测试时想要做的 如果有myModel.isValid()就好了;或者类似的东西。您可以在Java模型类上定义一个validate方法。请参阅相应的。您可以通过一些修改来使用此解决方案 在模型中: pac
如果有myModel.isValid()就好了;或者类似的东西。您可以在Java模型类上定义一个
validate
方法。请参阅相应的。您可以通过一些修改来使用此解决方案
在模型中:
package models;
import play.data.validation.Constraints;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.HashSet;
import java.util.Set;
public class TestModel {
@Constraints.Required
public String requiredField;
// method for directly models validation
public static Set<String> validate(Object object, Validator validator) {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object);
Set<String> errors = new HashSet<>();
for(ConstraintViolation<Object> cv : constraintViolations) {
errors.add(cv.getMessage());
}
return errors;
}
}
封装模型;
导入play.data.validation.Constraints;
导入javax.validation.ConstraintViolation;
导入javax.validation.Validator;
导入java.util.HashSet;
导入java.util.Set;
公共类测试模型{
@约束条件。必需
公共字符串必填字段;
//直接模型验证方法
公共静态集验证(对象、验证程序、验证程序){
Set constraintViolations=validator.validate(对象);
Set errors=new HashSet();
对于(ConstraintViolation cv:constraintViolations){
添加(cv.getMessage());
}
返回错误;
}
}
在控制器中:
package controllers;
import models.TestModel;
import play.data.validation.Validation;
import play.mvc.Controller;
import play.mvc.Result;
import java.util.Set;
public class Test extends Controller {
public static Result test() {
TestModel testModel = new TestModel();
Set<String> errors = TestModel.validate(testModel, Validation.getValidator());
if(!errors.isEmpty()) {
return badRequest();
}
return ok();
}
}
包控制器;
导入models.TestModel;
导入play.data.validation.validation;
导入play.mvc.Controller;
导入play.mvc.Result;
导入java.util.Set;
公共类测试扩展控制器{
公共静态结果测试(){
TestModel TestModel=新的TestModel();
Set errors=TestModel.validate(TestModel,Validation.getValidator());
如果(!errors.isEmpty()){
返回请求();
}
返回ok();
}
}
谢谢,但这帮不了什么忙。似乎我必须在该方法中重新实现验证,尽管我已经按要求注释了字段。即使validate方法返回字符串,也可以保存对象。当然,我可以实现自己的“saveif-validation-is-ok”方法,但与Rails(ActiveRecord)相比,这种方法对开发人员不太友好。这是唯一的解决方案吗?如果注释没有引起错误,将调用validate
方法。