Использование Spring Validator вне контекста Spring MVC - PullRequest
8 голосов
/ 07 марта 2012

Я использовал валидаторы с объектами поддержки и аннотациями в Spring MVC (@Validate).Это сработало хорошо.

Теперь я пытаюсь точно понять, как это работает с руководством Spring, внедрив мой собственный Validate.Я не уверен, как «использовать» мой валидатор.

Мой валидатор:

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import com.myartifact.geometry.Shape;

public class ShapeValidator implements Validator {

@SuppressWarnings("rawtypes")
public boolean supports(Class clazz) {
    return Shape.class.equals(clazz);
}

public void validate(Object target, Errors errors) {
    ValidationUtils.rejectIfEmpty(errors, "x", "x.empty");
    ValidationUtils.rejectIfEmpty(errors, "y", "y.empty");
    Shape shape = (Shape) target;
    if (shape.getX() < 0) {
        errors.rejectValue("x", "negativevalue");
    } else if (shape.getY() < 0) {
        errors.rejectValue("y", "negativevalue");
    }
}
}

Класс Shape, который я пытаюсь проверить:

public class Shape {

protected int x, y;

public Shape(int x, int y) {
    this.x = x;
    this.y = y;
}

public Shape() {}

public int getX() {
    return x;
}

public void setX(int x) {
    this.x = x;
}

public int getY() {
    return y;
}

public void setY(int y) {
    this.y = y;
}
}

Основной метод:

public class ShapeTest {

public static void main(String[] args) {
    ShapeValidator sv = new ShapeValidator();
    Shape shape = new Shape();

    //How do I create an errors object? 
    sv.validate(shape, errors);
}
}

С ошибкамиэто просто интерфейс, я не могу создать его экземпляр, как обычный класс.Как я на самом деле «использую» свой валидатор, чтобы подтвердить, что моя форма действительна или недействительна?

На примечании стороны, эта форма должна быть недействительной, так как в ней отсутствуют x и y.

1 Ответ

20 голосов
/ 08 марта 2012

Почему бы вам не использовать реализацию, которую предлагает пружина org.springframework.validation.MapBindingResult?

Вы можете сделать:

Map<String, String> map = new HashMap<String, String>();
MapBindingResult errors = new MapBindingResult(map, Shape.class.getName());

ShapeValidator sv = new ShapeValidator();
Shape shape = new Shape();
sv.validate(shape, errors);

System.out.println(errors);

Это распечатает все, что есть в сообщениях об ошибках.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...