[JAVA] Créez votre propre validateur avec Bean Validation

Aperçu

Un mémo de la procédure de l'écriture d'un validateur auto-fabriqué avec Bean Validation à l'écriture d'un test unitaire.

Essayer

Je vais essayer de faire un validateur pour juger s'il s'agit d'un nom de chanson de Michael Jackson.

Implémentation de la classe de données variables

package com.example.customvalidate;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.ArrayList;
import java.util.List;

public class MJValidator implements ConstraintValidator<MJ, String> {

    private final static List<String> songs = new ArrayList<String>() {
        {
            add("Remember The Time"); add("Stranger In Moscow"); add("You Are Not Alone");
        }
    };

    public void initialize(MJ constraintAnnotation) {
    }

    public boolean isValid(String value, ConstraintValidatorContext context) {
        return songs.stream().anyMatch(song -> song.equals(value));
    }
}

Commentaire

--Hériter de l'interface ConstraintValidator. Pour les génériques, spécifiez l'annotation à créer ultérieurement et le type à valider.

Mise en œuvre des annotations

Faites une annotation. Vous pouvez maintenant l'utiliser comme @ MJ

package com.example.customvalidate;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = {MJValidator.class})
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MJ {

    String message() default "you must specify one of Michael Jackson's songs.";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface List {
        MJ[] value();
    }
}

Commentaire

--Spécifiez la classe à valider à la place de @Constraint (validatedBy =). Spécifiez le MJ Validator créé ci-dessus. --Pour @ Target, spécifiez la cible à laquelle cette annotation peut être ajoutée. Cette fois, c'était un argument et un champ. --Pour message, spécifiez le message qui sera défini dans l'objet d'exception lorsque la validation est interceptée.

Ecrire un test

package com.example.customvalidate;

import org.junit.Before;
import org.junit.Test;
import javax.validation.*;
import java.util.Set;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

public class MJValidatorTest {

    private Validator validator;

    @Before
    public void setUp() {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }

    @Test
public void Une erreur se produira si vous transmettez un titre de chanson incorrect.() {
        TestBean bean = new TestBean("Remember a Time");
        Set<ConstraintViolation<Object>> violations = validator.validate(bean);
        assertThat(violations.isEmpty(), is(false));
        String expectedMessage = "you must specify one of Michael Jackson's songs.";
        violations.forEach(v -> assertThat(v.getMessage().equals(expectedMessage), is(true)));
    }

    @Test
public void Ne provoque pas d'erreur lors de la transmission du titre de chanson correct() {
        TestBean bean = new TestBean("Remember The Time");
        Set<ConstraintViolation<Object>> violations = validator.validate(bean);
        assertThat(violations.isEmpty(), is(true));
    }

    private static class TestBean {
        @MJ
        private String song;

        TestBean(String song) {
            this.song = song;
        }
    }
}

Exécutez-le et si le test réussit bien.

Commentaire

--Une classe appropriée est créée en tant que classe interne de la classe de test, et l'annotation créée cette fois est définie dans le champ.

Recommended Posts

Créez votre propre validateur avec Bean Validation
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
Créez vos propres annotations Java
Créez votre propre échantillonneur avec JMeter
Créez votre propre requête de fonction Solr
Ajouter une validation de bean avec Micronaut (Java)
Contrôle d'entrée facile avec Bean Validation!
Créez votre propre encodage pour String.getBytes ()
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
Utilisation du composant Talend (5) Créez votre propre composant
Créez votre propre application Android pour l'apprentissage Java
Ajoutez vos propres éléments d'authentification avec Spring Security
[Java] Trier ArrayList avec des éléments de votre propre classe
Appelez votre propre classe créée sous lib avec Rails
Appelez votre propre méthode avec PreAuthorize dans Spring Security
Essayez de créer avec Trailblazer
Validation de JSON avec le schéma JSON
Faites votre propre pomodoro
Validation personnalisée avec Spring
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ③ ~ Ajouter une validation ~
Enregistrez votre propre image Docker dans ECR à l'aide de l'AWS CLI
Java: démarrez WAS avec Docker et déployez votre propre application
Utilisez votre propre classe dans le répertoire lib avec Rails6