Heim > Java > javaLernprogramm > Hauptteil

Wie SpringBoot die Validierung nutzt, um elegante Verifizierungsparameter zu implementieren

WBOY
Freigeben: 2023-05-17 09:31:10
nach vorne
1218 Leute haben es durchsucht

1. Vorwort

Die Datenüberprüfung ist eine unverzichtbare Funktion interaktiver Websites und kann die meisten Überprüfungsaufgaben abdecken, z. B. die Eindeutigkeit des Benutzernamens, das Geburtstagsformat, die Überprüfung des E-Mail-Formats usw. Um jedoch zu verhindern, dass Benutzer den Browser umgehen und http-Tools verwenden, um illegale Daten direkt vom Backend anzufordern, ist auch eine serverseitige Datenüberprüfung erforderlich, um zu verhindern, dass schmutzige Daten in die Datenbank gelangen Die Datenbank wird ebenfalls beschädigt Es wird dem Betriebs- und Wartungspersonal Kopfschmerzen bereiten. Sie können die in diesem Artikel beschriebene Validierung verwenden, um die Daten zu überprüfen.

2. Häufig verwendete Überprüfungen

1.JSR303/JSR-349: JSR303 ist ein Standard, der nur Spezifikationen, aber keine Implementierung bereitstellt. Er legt einige Überprüfungsspezifikationen fest, wie z. B. @Null, @NotNull. @Pattern, befindet sich im Paket javax.validation.constraints. JSR-349 ist die aktualisierte Version, die einige neue Funktionen hinzufügt.

  • @Null Das mit Anmerkungen versehene Element muss null sein

  • @NotNull Das mit Anmerkungen versehene Element darf nicht null sein

  • @AssertTrue Das mit Anmerkungen versehene Element muss wahr sein

  • @AssertFalse Das mit Anmerkungen versehene Element muss falsch sein

  • @Min(Wert) Das mit Anmerkungen versehene Element muss eine Zahl sein, sein Wert muss größer oder gleich dem angegebenen Mindestwert sein

  • @Max(Wert) Das mit Anmerkungen versehene Element muss eine Zahl sein, sein Wert muss sein kleiner oder gleich dem angegebenen Maximalwert

  • @DecimalMin(value) Das mit Anmerkungen versehene Element muss eine Zahl sein und sein Wert muss größer oder gleich dem angegebenen Mindestwert sein

  • @DecimalMax(value) Das Das mit Anmerkungen versehene Element muss eine Zahl sein, sein Wert muss kleiner oder gleich dem angegebenen Maximalwert sein.

  • @Size(max, min) Die Größe des mit Anmerkungen versehenen Elements muss innerhalb des angegebenen Bereichs liegen. Ganzzahl, Bruch) Das mit Anmerkungen versehene Element muss eine Zahl sein, deren Wert innerhalb des akzeptablen Bereichs liegen muss

    @ Pattern(value) Das mit Anmerkungen versehene Element muss dem angegebenen regulären Ausdruck entsprechen
  • 2. Hibernate-Validierung: Die Hibernate-Validierung ist die Implementierung dieser Spezifikation und fügt einige andere Validierungsanmerkungen hinzu, z. B. @Email, @Length, @ Range usw.
  • @Email Das mit Anmerkungen versehene Element muss eine E-Mail-Adresse sein
  • @Length Die Größe der mit Anmerkungen versehenen Zeichenfolge muss innerhalb des angegebenen Bereichs liegen
  • @NotEmpty Die mit Anmerkungen versehene Zeichenfolge muss nicht leer sein

@Range Das mit Anmerkungen versehene Element muss innerhalb des entsprechenden Bereichs liegen
  • 3.Spring-Validierung: Die Spring-Validierung kapselt die Ruhezustandsvalidierung neu, fügt dem Springmvc-Modul eine automatische Validierung hinzu und die Verifizierungsinformationen werden in eine bestimmte Klasse gekapselt
  • 3. Die automatische Datenüberprüfungsfunktion von Spring Boot

    3.1 Einführung von Abhängigkeiten
  • Das Spring-Web-Modul verwendet die Hibernate-Validierung und das Databind-Modul bietet auch entsprechende Datenbindungsfunktionen.

    <dependencies>
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    Nach dem Login kopieren

    Wir müssen nur die Spring-Boot-Starter-Web-Abhängigkeit einführen. Wenn Sie sich die Unterabhängigkeiten ansehen, können Sie die folgenden Abhängigkeiten finden:
  • <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    Nach dem Login kopieren
  • 3.2 Erstellen Sie die Startup-Klasse

    @SpringBootApplication
    public class App {
       public static void main(String[] args) {
           SpringApplication.run(App.class, args);
           System.out.println("Start app success.");
       }
    }
    Nach dem Login kopieren

    3.3 Erstellen Sie die Entitätsklasse das muss überprüft werden
  • public class Person {
        @NotEmpty(message = "name不能为空")
        private String name;
        @Range(min = 0, max = 100, message = "age不能大于100小于0")
        private int age;
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    Nach dem Login kopieren
3.4 Daten im Controller überprüfen

springmvc bietet uns die Funktion, Formularparameter automatisch zu kapseln. Ein typischer Controller mit hinzugefügter Parameterüberprüfung sieht wie folgt aus.

@RequestMapping("/test")
public String valid(@Validated Person person, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            System.out.println(fieldError);
        }
        return "fail";
    }
    return "success";
}
Nach dem Login kopieren

Bemerkenswerte Punkte:

Die @Validated-Annotation muss vor dem Parameter Persison hinzugefügt werden, um anzuzeigen, dass Spring sie überprüfen muss, und die Überprüfungsinformationen werden im nachfolgenden BindingResult gespeichert. Beachten Sie, dass sie nebeneinander liegen müssen. Wenn mehrere Parameter überprüft werden müssen, kann das Formular wie folgt aussehen. valid(@Validated Person person, BindingResult personBindingResult, @Validated Person2 person2, BindingResult person2BindingResult); das heißt, eine Verifizierungsklasse entspricht einem Verifizierungsergebnis.

Die Verifizierungsergebnisse werden automatisch ausgefüllt und bestimmte Vorgänge können basierend auf der Geschäftslogik im Controller entschieden werden, z. B. das Springen zu einer Fehlerseite.

Eine grundlegendste Überprüfung ist abgeschlossen

Starten Sie den Container und die Testergebnisse lauten wie folgt:

    Feldfehler im Objekt „Person“ im Feld „Alter“: abgelehnter Wert [105]; Codes [Bereich. person.age,Range.int,Range]; Argumente [org.springframework.context.support.DefaultMessageSourceResolvable: codes [person.age,age],100,0] ; Standardmeldung [Alter darf nicht größer als 100 und kleiner als 0 sein]
  • 3.5 Einheitliche Ausnahmebehandlung
  • Die vorherige Methode zur Behandlung von Überprüfungsfehlern ist etwas kompliziert und die meisten Websites kapseln Anforderungsfehler in einer einheitlichen 404-Seite Die Datenüberprüfung ist nicht erfolgreich. Wenn sie bestanden wird, löst Spring Boot eine BindException-Ausnahme aus. Wir können diese Ausnahme abfangen und Result verwenden, um das Rückgabeergebnis zu kapseln. Um eine Klasse zum Abfangen von Ausnahmen zu definieren, verwenden Sie @RestControllerAdvice.

    Controller-Klasse:
  • @RequestMapping(value = "valid", method = RequestMethod.GET)
    public String valid(@Validated Person person) {
        System.out.println(person);
        return "success";
    }
    Nach dem Login kopieren
Einheitliche Ausnahmebehandlungsklasse:

@RestControllerAdvice
public class BindExceptionHanlder {
    @ExceptionHandler(BindException.class)
    public String handleBindException(HttpServletRequest request, BindException exception) {
        List<FieldError> allErrors = exception.getFieldErrors();
        StringBuilder sb = new StringBuilder();
        for (FieldError errorMessage : allErrors) {
            sb.append(errorMessage.getField()).append(": ").append(errorMessage.getDefaultMessage()).append(", ");
        }
        System.out.println(sb.toString());
        return sb.toString();
    }
}
Nach dem Login kopieren

Test: http://localhost:8080/valid?age=105&name=steven

输出:age: age不能大于100小于0,

Wie SpringBoot die Validierung nutzt, um elegante Verifizierungsparameter zu implementieren

4、自定义校验注解

4.1 @NameValidation

@Documented
@Constraint(validatedBy = NameValidationValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RUNTIME)
public @interface NameValidation {
    String message() default "不是合法的名字";

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

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

    @Target({PARAMETER, ANNOTATION_TYPE})
    @Retention(RUNTIME)
    @Documented
    @interface List {
        NameValidation[] value();
    }
}
Nach dem Login kopieren

4.2 校验类NameValidationValidator

public class NameValidationValidator implements ConstraintValidator<NameValidation, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if ("steven".equalsIgnoreCase(value)) {
            return true;
        }
        String defaultConstraintMessageTemplate = context.getDefaultConstraintMessageTemplate();
        System.out.println("default message :" + defaultConstraintMessageTemplate);
        //禁用默认提示信息
		//context.disableDefaultConstraintViolation();
        //设置提示语
		//context.buildConstraintViolationWithTemplate("can not contains blank").addConstraintViolation();
        return false;
    }
}
Nach dem Login kopieren

4.3 在Person类增加新注解

@NotEmpty(message = "name不能为空")
@NameValidation
private String name;
Nach dem Login kopieren

测试: http://localhost:8080/valid?age=105&name=lxy

输出:age: age不能大于100小于0, name: 不是合法的名字,

Wie SpringBoot die Validierung nutzt, um elegante Verifizierungsparameter zu implementieren

Das obige ist der detaillierte Inhalt vonWie SpringBoot die Validierung nutzt, um elegante Verifizierungsparameter zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage