2011-02-04 9 views
8

He estado buscando por un tiempo sin suerte. I no usando Spring MVC pero todavía quiero usar @javax.validation.Valid para habilitar la validación de los argumentos del método. Para dar un ejemplo¿Existe una forma estándar de habilitar la validación de beans JSR 303 utilizando los argumentos del método anotado?

public class EventServiceImpl implements IEventService { 
    @Override 
    public void invite(@Valid Event event, @Valid User user) { ... } 
} 

El uso de MVC, esto está habilitado para @Controller frijoles con anotaciones con un sencillo <mvc:annotation-driven/> (ver 5.7.4.3 Configuring a JSR-303 Validator for use by Spring MVC).

El uso de AOP debe ser bastante trivial. Sin embargo, sospecho que hay una forma estándar de hacer esto. De ahí la pregunta: ¿hay algo similar para las aplicaciones que no son MVC y los beans que no son controladores para permitir la validación de entrada para beans anotados?

Respuesta

6

La validación del nivel de método no es parte de la especificación de Validación de frijol (JSR 303). La validación del nivel de método es una sugerencia en la especificación agregada en appendix C.

Hibernate Validator 4.2 (una versión beta ya está disponible) está implementando esta sugerencia y permite colocar anotaciones JSR 303 en los parámetros del método y los valores de retorno. Por supuesto, todavía necesitará un poco de código de pegamento Spring, pero eso no debería ser demasiado difícil.

También Bean Validation 1.1 agregará la validación de nivel de método oficialmente a la especificación (no solo como apéndice/recomendación). Consulte también http://beanvalidation.org/

3

El uso de MVC, esto está habilitado para los granos de @Controller anotada

@Valid es sólo un marcador en los granos de controlador que oculta el código que hace la validación y pone todas las violaciónes de restricción en Errors en un bonito camino. Los diseñadores de primavera podrían haber inventado su propia anotación para hacer lo mismo.

El uso real de la anotación @Valid está en la clase (bean) que está validando con el validador JSR 303 y su uso principal es validar el gráfico de objetos. Lo que significa que un bean puede tener otras referencias de bean con la anotación @Valid para activar la validación recursivamente.

Fuera del MVC, puede usar el validador configurado para validar cualquier bean que use anotaciones JSR 303 pero, a diferencia del Errors muy bien poblado en el controlador, tendrá que decidir qué va a hacer con las violaciones de restricciones.

Por lo tanto, para responder a su pregunta, no hay una forma estándar. Para tener la misma apariencia que en un controlador, puede usar la anotación @Valid (o crear una nueva) para ejecutar el asesoramiento de AOP para validar un bean y rellenar un 'ViolationCollector' (algo así como Errors in MVC) que se debe pasar a un método.

Cuestiones relacionadas