2012-02-29 6 views
7

Tengo un POJO llamado deporte con las propiedades sportID, sportName, número de jugadores. Utilizando la validación anotada, escribí mi propia restricción de anotación para verificar si sportName ya existe en la base de datos o no. Funciona muy bien al tratar de agregar un sportName, sin embargo, si trato de actualizar jugadores sin cambiar el nombre del deporte, la validación también falla.Validación de la anotación de primavera: compruebe si hay actualizaciones únicas o agregue

¿Hay alguna forma de pasar un parámetro en la validación anotada? Por ejemplo, me gustaría pasar en sportID a la verificación de contraseño de sportName para poder excluir esa identificación en la consulta de db.

¿O hay una mejor manera de hacerlo? En mi controlador, ¿debo dejar que Spring valide las entradas (con @Valid) y luego, si no hay errores, llamar a una función de validación para verificar las reglas comerciales?

Respuesta

3

Una mejor manera sería usar grupos de validación. (Spring MVC and JSR-303 Validation Groups)

Luego puede tener el grupo de validación predeterminado sin el "validador de no salidas". Y tenga un grupo adicional con el "validador de no salidas". Esto le permitiría activar el "validador de no salidas" solo cuando lo necesite. (Desafortunadamente no es compatible directamente en Spring 3.0, allí debe iniciar la validación "a mano")

Otra forma sería no implementar el validador como un validador de campo, sino más bien como un validador de clase. - Eche un vistazo a las diferentes soluciones discutidas para la validación de campo cruzado in this Stack Overflow Question. Le dará una idea de cómo acceder al campo de id.

+0

Utilicé ese enlace que me envió y funcionó. De hecho, lo leí ayer, pero no pude entender cómo pasar un int pero me di cuenta de que estaba buscando una cadena del nombre del campo y el código BeanUtils.getProperty es lo que realmente obtiene el valor, que Puedo lanzar como un Entero. – Felix

Cuestiones relacionadas