Ajouter une validation de bean avec Micronaut (Java)

Je souhaite utiliser ma propre validation Bean avec Micronaut

J'ai dû créer mon propre validateur dans mon travail, et comme il s'agit d'un nouveau framework, j'ai eu beaucoup de mal en tant que débutant de && Java qui n'a pas du tout de matériaux.

En conséquence, j'ai pris note de ce à quoi je m'attendais.

Contexte

La tâche actuelle nécessite une telle implémentation, qui est courante pour la validation d'entrée.

Assurez-vous que certains paramètres de la requête correspondent à l'expression canonique spécifiée 2. Sinon, renvoie une réponse d'erreur avec un message d'erreur spécifique

Élémentaire? Avec Micronaut, je pense que cela peut être réalisé avec Pattern (regexp =" pattern ", message =" message "), mais dans le projet actuel, il est traité par un gestionnaire pour chaque annotation, et cette implémentation était peu pratique.

la mise en oeuvre

** Ajouté le 04/03/2020 Il est nécessaire d'ajouter @ Singleton à la classe Validator, donc je l'ai ajouté. ** **

Annotation + Varidata

Bean Validation qui vérifie le champ EmployeeNumber pour l'un des éléments suivants:

--La valeur est NULL --Forme de UXXXX, NXXX, KXXXX

package com.myproject.annotation;

import io.micronaut.core.annotation.AnnotationValue;
import io.micronaut.validation.validator.constraints.ConstraintValidator;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Singleton;
import javax.validation.Constraint;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.regex.Pattern;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Target({FIELD})
@Retention(RUNTIME)
@Documented

@Constraint(validatedBy = {EmployeeNumberValidator.class})
public @interface EmployeeNumber {
    String message() default "Le numéro d'employé est la première lettre du nom de l'entreprise+Veuillez saisir des nombres demi-largeur à 4 chiffres.";
}

@Singleton
class EmployeeNumberValidator
implements ConstraintValidator<EmployeeNumber, String> {
    private static final Pattern EmployeeNumberPattern = Pattern.compile("^[UNK]\\d{4}+$");

    @Override
    public boolean isValid(@Nullable String value, @Nonnull AnnotationValue<EmployeeNumber> annotationMetadata, @Nonnull io.micronaut.validation.validator.constraints.ConstraintValidatorContext context) {
        if (value == null) {
            return true;
        }
        return EmployeeNumberPattern.matcher(value).matches();
    }
}

Cette fois, le validateur et l'annotation sont assemblés, mais si vous voulez découper dans un autre fichier, réglez le validateur sur «public» et «import» du côté de l'annotation.

Les annotations attachées à l'interface de définition d'annotation elle-même ne sont pas spécifiques à Micronaut et apparaîtront immédiatement après la recherche, donc je ne les expliquerai pas (je ne comprends pas bien).

Demander une entité qui utilise des annotations

package com.myproject.request;

import com.myproject.annotation.EmployeeNumber;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import io.micronaut.core.annotation.Introspected;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

@Introspected
@Data
@JsonFormat
public class EmployeeSearchRequest {
    @NotNull
    private String officeCode;
    private String employeeId;
    @EmployeeNumber
    private String employeeName;
}

Où j'ai trébuché

Au départ, lorsque j'ai essayé de l'implémenter en me référant à l'article qui implémente javax.validation.ConstraintValidator, le phénomène selon lequel le gestionnaire de ConstraintViolationException ne l'a pas relevé même s'il était annoté s'est produit.

** ʻO.micronaut.validation.validator.constraints.ConstraintValidator` est implémenté ** Il semble qu'il était nécessaire de créer un validateur.

Ce problème a été résolu en spécifiant l'annotation «@ Constraint».

Recommended Posts

Ajouter une validation de bean avec Micronaut (Java)
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Java (add2)
Contrôle d'entrée facile avec Bean Validation!
Java (ajouter)
Ajouter un index avec Java8 Stream.map (version tupple)
Créez votre propre validateur avec Bean Validation
Introduisez Bean Validation 2.0 dans les programmes Java SE
Essayez DI avec Micronaut
Installez java avec Homebrew
[Java] Vérification de la corrélation sans créer d'annotation par vous-même avec Bean Validation
Changer de siège avec Java
Installez Java avec Ansible
Téléchargement confortable avec JAVA
Validation de JSON avec le schéma JSON
Changer java avec direnv
[Java] Initialisation, ajout, acquisition
Téléchargement Java avec Ansible
Validation personnalisée avec Spring
Raclons avec Java! !!
Construire Java avec Wercker
Hello World avec Micronaut
Fonction sans serveur avec Micronaut
java: Ajouter une date [Note]
Commencez avec Java sans serveur avec le framework léger Micronaut!
Conversion Endian avec JAVA
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ③ ~ Ajouter une validation ~
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
Cartographie de Bean avec MapStruct Partie 1
Configuration Java avec Spring MVC
Authentification de base avec Java 11 HttpClient
Exécuter un lot avec docker-compose avec Java batch
[Template] Connexion MySQL avec Java
Installez Java 7 avec Homebrew (cask)
Message de validation de processus avec Decorator
[Java] Communication JSON avec jackson
Cartographie Bean avec MapStruct Partie 3
Essayez la connexion DB avec Java
Activer Java EE avec NetBeans 9
[Java] JavaConfig avec classe interne statique
Essayez gRPC avec Java, Maven
Exploitons Excel avec Java! !!
Cartographie de Bean avec MapStruct Partie 2
Gestion des versions Java avec SDKMAN
Pagination de PDF avec Java + PDFBox.jar
Trier les chaînes comme une fonction caractéristique avec Java
Orienté objet avec Strike Gundam (java)
Accédez à Apache Kafka avec Micronaut
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Dépannage avec Java Flight Recorder
Vérification des données Excel d'ajout Java
Rationalisez les tests Java avec Spock
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Erreur lors de la lecture avec java
Utilisation de Mapper avec Java (Spring)
Mémo d'étude Java 2 avec Progate