Apprenez à créer un validateur personnalisé dans Spring Boot pour garantir la conformité des données en API. Dans cet article, découvrez les étapes pour mettre un place un validateur efficace et réutilisable.
Par Adrien Pereira
Intro
Créer un validateur personnalisé dans Spring Boot permet d'assurer que les données envoyées à votre API respectent des règles spécifiques. Dans cet article, nous allons voir les différentes étapes pour mettre en place un validateur efficace et réutilisable.
Comment créer son propre validateur ?
Vous pouvez vérifier un DTO en entrée avec certains validateurs par Jakarta.
Comme par exemple : Positive, NotNull.
Mais parfois, vous devez créer votre propre validateur.
Par exemple, j’ai une API pour enregistrer et obtenir une liste de films. Cependant, je ne peux pas sauvegarder un film avec un pays autre que la France ou les Etats-Unis.
L’annotation IsGoodCountry n’existe pas, vous devez donc en faire une.
Pour cela, vous avez deux possibilités :
Vous n’avez besoin de cette vérification que dans une seule classe, vous pouvez alors créer une méthode dans isFranceOrUsa avec l’annotation assertTrue :
@Data@AllArgsConstructor@NoArgsConstructorpublicclassMoviePresenterDto {
private String name;
private String comment;
private Instant creationDate;
private String category;
private String country;
private Float price;
@AssertTrue(message = "Country must be France or Usa.")privatebooleanisFranceOrIsUsa(){
return country == null ||
"France".equalsIgnoreCase(country) || "USA".equalsIgnoreCase(country);
}
}
Si vous devez utiliser cette validation dans d’autres classes, vous pouvez rendre une annotation réutilisable :
Faite une annotation
@Documented@Constraint(validatedBy = ...)@Target({ ElementType.METHOD, ElementType.FIELD })@Retention(RetentionPolicy.RUNTIME)public@interface IsGoodCountryConstraint {
String message()default"Country must be France or Usa.";
Class<?> groups() default {};
Class<? extendsPayload>[] payload() default {};
}
Ecrivez une classe de validation : (elle est liée à l’annotation constraint)