Ich musste meinen eigenen Validator in meiner Arbeit erstellen, und da es sich um ein neues Framework handelt, hatte ich als Anfänger von && Java, der überhaupt keine Materialien hat, große Probleme.
Infolgedessen habe ich mir notiert, was ich erwartet hatte.
Die aktuelle Aufgabe erfordert eine solche Implementierung, die für die Eingabevalidierung üblich ist.
Grundstufe? Ich denke, dass es mit Micronaut mit "Pattern (regexp =" pattern ", message =" message ")" realisiert werden kann, aber im aktuellen Projekt wird es von einem Handler für jede Annotation verarbeitet, und diese Implementierung war unpraktisch.
** Hinzugefügt am 2020/03/04 Es ist notwendig, @ Singleton
zur Validator-Klasse hinzuzufügen, also habe ich es hinzugefügt. ** ** **
Bean-Validierung, die das Feld EmployeeNumber auf eine der folgenden Optionen überprüft:
--Wert ist NULL
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 "Die Mitarbeiternummer ist der erste Buchstabe des Firmennamens+Bitte geben Sie 4-stellige Zahlen mit halber Breite ein.";
}
@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();
}
}
Dieses Mal werden der Validator und die Annotation zusammengefügt. Wenn Sie jedoch in eine andere Datei ausschneiden möchten, setzen Sie den Validator auf der Annotationsseite auf "public" und "import".
Die an die Anmerkungsdefinitionsschnittstelle selbst angehängten Anmerkungen sind nicht spezifisch für Micronaut und werden unmittelbar nach der Suche angezeigt, sodass ich sie nicht erläutere (ich verstehe sie nicht gut).
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;
}
Als ich anfänglich versuchte, es unter Bezugnahme auf den Artikel zu implementieren, der "javax.validation.ConstraintValidator" implementiert, trat das Phänomen auf, dass der Handler von "ConstraintViolationException" es nicht auffing, obwohl es mit Anmerkungen versehen war.
** Es scheint, dass ich einen Validator erstellen musste, der io.micronaut.validation.validator.constraints.ConstraintValidator
implementiert **.
Dies wurde durch Angabe der Anmerkung "@ Constraint" behoben.
Recommended Posts