Curso:
1. Primeros pasos |
2. Modelo básico del dominio (1) |
3. Modelo básico del dominio (2) |
4. Refinar la interfaz de usuario |
5. Desarrollo ágil |
6. Herencia de superclases mapedas |
7. Herencia de entidades |
8. Herencia de vistas |
9. Propiedades Java |
10. Propiedades calculadas |
11. @DefaultValueCalculator en colecciones |
12. @Calculation y totales de colección |
13. @DefaultValueCalculator desde archivo |
14. Evolución del esquema manual |
15. Cálculo de valor por defecto multiusuario |
16. Sincronizar propiedades persistentes y calculadas |
17. Lógica desde la base de datos |
18. Validando con @EntityValidator |
19. Alternativas de validación |
20. Validación al borrar |
21. Anotación Bean Validation propia |
22. Llamada REST desde una validación |
23. Atributos en anotaciones |
24. Refinar el comportamiento predefinido |
25. Comportamiento y lógica de negocio |
26. Referencias y colecciones |
A. Arquitectura y filosofía |
B. Java Persistence API |
C. Anotaciones |
D. Pruebas automáticas
En la lección anterior aprendiste como llamar a un servicio REST para validar el ISBN. En esta lección vas a aprender a como añadir atributos a tu anotación.
Si no te gustan los videos sigue las instrucciones a continuación.
Añadir atributos a tu anotación
Creas una anotación
Bean Validation cuando quieres reutilizar la validación varias veces, usualmente en varios proyectos. En este caso, necesitas hacer tu validación adaptable, para que sea reutilizable de verdad. Por ejemplo, en el proyecto actual buscar en
openlibrary.org el ISBN es conveniente, pero en otro proyecto, o incluso en otra entidad de tu actual proyecto, puede que no quieras hacer esa búsqueda. Necesitas hacer tu anotación más flexible.
La forma de añadir esta flexibilidad a tu anotación de validación es mediante los atributos. Por ejemplo, podemos añadir un atributo de búsqueda booleano a nuestra anotación
ISBN para poder escoger si queremos buscar el ISBN en internet para validar o no. Para hacerlo, simplemente añade el atributo
buscar al código de la anotación
ISBN que se encuentra en el paquete de la carpeta
com.tuempresa.facturacion.anotaciones, tal como muestra el siguiente código:
public @interface ISBN {
boolean buscar() default true; // Para (des)activar la búsqueda web al validar
// ... el resto del código
}
Este nuevo atributo
buscar puede leerse de la clase validador que se encuentra en la carpeta
com.tuempresa.facturacion.validadores. Míra como modificarlo:
public class ValidadorISBN implements ConstraintValidator<ISBN, Object> {
// ...
private boolean buscar; // Almacena la opción buscar
public void initialize(ISBN isbn) { // Lee los atributos de la anotación
this.buscar = isbn.buscar();
}
public boolean isValid(Object valor, ConstraintValidatorContext contexto) {
if (Is.empty(valor)) return true;
if (!validador.isValid(valor.toString())) return false;
return buscar ? existeISBN(valor) : true; // Usa 'buscar'
}
// ...
}
Aquí ves la utilidad del método
initialize(), que lee la anotación para inicializar el validador. En este caso simplemente almacenamos el valor de
isbn.buscar() para preguntar por él en
isValid().
Ahora puedes escoger si quieres llamar a nuestro servicio REST o no para hacer la validación ISBN. Mira como:
public class Producto {
//...
@ISBN(buscar=false) // En este caso no se hace una búsqueda en la web para validar el ISBN
private String isbn;
//...
}
Ahora prueba la aplicación y verás que la validación no se ejecuta.