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.
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.
** Ajouté le 04/03/2020 Il est nécessaire d'ajouter @ Singleton
à la classe Validator, donc je l'ai ajouté. ** **
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).
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;
}
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