Проверьте валидацию непосредственно на модели - PullRequest
4 голосов
/ 03 апреля 2012

Я только начал "играть" с Play Framework (2.0), и у меня возникли проблемы с поиском решения для прямой проверки моделей. Я погуглил проблему, но не могу найти никаких примеров.

В Rails вы можете проверить правильность модели, написав так: my_model.valid?

Я видел только примеры, где я могу проверить модели в контроллере, но это не то, что я хочу делать прямо сейчас, когда пишу модульные тесты.

Было бы неплохо иметь myModel.isValid (); или что-то подобное.

Ответы [ 2 ]

5 голосов
/ 04 апреля 2012

Вы можете определить метод validate в ваших классах модели Java. См. Соответствующую документацию .

4 голосов
/ 29 августа 2012

Вы можете использовать это решение с некоторыми модификациями.

В модели:

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;
    }
}

В контроллере:

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();
    }

}
...