Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 直接在模型上检查验证_Java_Playframework_Playframework 2.0 - Fatal编程技术网

Java 直接在模型上检查验证

Java 直接在模型上检查验证,java,playframework,playframework-2.0,Java,Playframework,Playframework 2.0,我刚刚开始“玩”play framework(2.0),在寻找直接验证模型的解决方案时遇到了一些麻烦。我用谷歌搜索了这个问题,但找不到任何例子 在Rails中,您可以通过以下方式检查模型是否有效:my_model.valid 我只看到过一些示例,其中我可以验证控制器中的模型,但这不是我现在编写单元测试时想要做的 如果有myModel.isValid()就好了;或者类似的东西。您可以在Java模型类上定义一个validate方法。请参阅相应的。您可以通过一些修改来使用此解决方案 在模型中: pac

我刚刚开始“玩”play framework(2.0),在寻找直接验证模型的解决方案时遇到了一些麻烦。我用谷歌搜索了这个问题,但找不到任何例子

在Rails中,您可以通过以下方式检查模型是否有效:my_model.valid

我只看到过一些示例,其中我可以验证控制器中的模型,但这不是我现在编写单元测试时想要做的


如果有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
方法。