2012-03-07 23 views
8

He utilizado validadores con objetos de respaldo y anotaciones en Spring MVC (@Validate). Funcionó bienUso de Spring Validator fuera del contexto de Spring MVC

Ahora trato de entender exactamente cómo funciona el manual de Spring implementando mi propio Validate. No estoy seguro de cómo "usar" mi validador.

Mi Validador:

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

La clase Shape es que busque para validar:

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

método principal:

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

ya que los errores es sólo una interfaz, que puede' Realmente lo instancia como una clase ordinaria. ¿Cómo "uso" mi validador para confirmar que mi forma es válida o inválida?

En una nota lateral, esta forma debería ser inválido ya que carece de una x y una y.

Respuesta

19

¿Por qué no utiliza la implementación que ofrece la primavera org.springframework.validation.MapBindingResult?

que puede hacer:

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

esto mostrara todo lo que en los mensajes de error.

Buena suerte

+3

Esto funcionó como un encanto! Solo desearía que la documentación muestre cómo funciona eso cuando aparece por primera vez el concepto de validaciones ... – Harry

+4

¿Puede decirnos por qué necesitamos el segundo argumento, Shape.class.getName()? –