2012-01-12 18 views
5

Deseo aplicar ciertas anotaciones @NotBlank solo si otro campo es falso. En mi proyecto actual, tenemos que usar el validador de hibernación, por lo que no hay validación de commons + valang disponible para resolver esto.Validador de Hibernate: aplicar condicionalmente el validador

Como no soy muy aficionado a la creación de anotaciones personalizadas para resolver lo que debería ser fácil (algo molesto porque esto no forma parte de la especificación JSR-303) me preguntaba si alguien sabía de una manera aceptable para lograr esto. Encontré un tarro que lo logró, pero eso fue para Hibernate 3. Y debido a los cambios ...

Respuesta

5

En este caso, el enfoque sugerido es usar restricciones de nivel de clase en lugar de Campo o Nivel de propiedad.

Por favor refiérase Hibernate Validator Docs

ahora es molesto. Tuve un escenario como este y probé algo como @NotEmpty (depends = "anotherField") y fue un fracaso total.

Quizás otros miembros conozcan otra forma de hacerlo, pero por ahora, estoy haciendo lo que Hibernate Validator dice que haga.

+0

Para ser honesto, en mi opinión, la falta de soporte para este tipo de escenario es uno de mis favoritos con la especificación JSR-303. Y las restricciones de nivel de clase son buenas y todas, pero no le dan la misma flexibilidad al colocar y personalizar sus mensajes de error. –

+1

De acuerdo, pero creo que es solo una cuestión de separación de preocupaciones. Las validaciones de campo son específicamente para un Campo/Propiedad (vacío, nulo, mayor que X, menor que Y). Esas validaciones son inmutables y no se supone que dependan de ninguna otra parte del sistema. Nunca te confundirás con eso. De lo contrario, alguien podría crear una locura de validación en un solo campo. – Beccari

+1

@Beccari Si mi situación es que si field1 = verdadero, valide el otro. Y digamos que mi otro campo es un objeto de clase, y por ahora solo estoy usando @Valid en él. Si tuviera que hacer este tipo de cosas if-else, tendré que escribir el mecanismo de validación para mi otro campo por mi cuenta, ¿verdad? No puedo usar '@ Valid' por más tiempo – Kraken

Cuestiones relacionadas