2011-08-26 8 views
5

Estoy intentando utilizar la validación de Spring para validar mi modelo poblado por el convertidor de Jackson. Así que tengo una clase Java,Validación de primavera: unir mediante programación a un validador

class MyClass(){ 
    private String myString; 
} 

Esta clase está poblada por Jackson y tengo la instancia en mi código Java. también ha definido una clase de validador como,

class MyValidator implements Validator { 
    public boolean supports(Class<?> clazz) { 
     return MyClass.class.equals(clazz); 
    } 
    public void validate(Object object, Errors errors) { 
      //Validation logic here 
    } 
} 

Ahora lo que quería hacer era enviar el objeto al validador y obtener objetan los errores, examinar y seguir adelante. Pero, para llamar al

validate(Object object,Errors errors) 

Necesito una instancia de errores que no tengo. No puedo usar BindingResult o Errors. Aconseja sobre cómo proceder más.

Respuesta

8

Usted puede hacer esto manualmente en el código con un DataBinder:

MyClass toValidate = new MyClass(); 
DataBinder binder = new DataBinder(toValidate); 
binder.setValidator(new MyValidator()); 
binder.validate(); 
if (binder.getBindingResult().hasErrors()) { 
    // oh noes! 
} 

Aunque si usted tiene un @ModelAttribute definido en una @Controller en primavera-mvc, algo como esto debería funcionar (colocado en el interior del relevante @Controller):

@ModelAttribute("myclass") 
public MyClass myClass() { 
    return new MyClass(); 
} 

@InitBinder("myclass") 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(new MyValidator()); 
} 

@RequestMapping(value = "/do/something", method = POST) 
public ModelAndView validatedRequest(@Valid @ModelAttribute("myclass") MyClass profile, 
            BindingResult result) { 
    if (result.hasErrors()) { 
     // oh noes! 
    } 
} 
+0

Eventualmente terminé poniendo todas mis validaciones en una clase separada e invocadas directamente desde el modelo. Pero la sugerencia proporcionada debería funcionar para cualquier persona que enfrente el mismo problema – Raghav

+0

gracias a que varíen mucho –

Cuestiones relacionadas