Die Überprüfung wurde mit Spring Boot 2.0.9 durchgeführt.
TL;DR Eine einfache Validierung kann jederzeit mit dem von "Validation.buildDefaultValidatorFactory (). GetValidator ()" von "javax.validation.Validation" erhaltenen "Validator" durchgeführt werden.
Inhalte, die Anmerkungen enthalten, die "@ Autowired" -Validatoren verwenden, können jederzeit validiert werden, indem "@ Autowire" mit "@ Autowire" injiziert wird, um sie abzurufen und zu verwenden.
Wenn Sie möchten, dass der Controller das Formular erhält, das Sie validieren möchten, können Sie einen Fehler in BindingResult
erhalten, indem Sie folgende Schritte ausführen:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/*Kürzung*/
@PostMapping("/api/test-post-api")
public void editRelayStructs(
@RequestBody @Validated Form form,
BindingResult errorResult
) {
/*Kürzung*/
}
In einigen Fällen möchten Sie möglicherweise jederzeit eine Validierung durchführen, z. B. einen Komponententest oder eine Korrelationsprüfung mit Parametern. In diesem Fall können Sie den Fehler in der oben angegebenen Form nicht validieren und empfangen.
Wenn es keinen Grund wie "@ Autowire" gibt, können Sie jederzeit mit "Validator" validieren, das von "Validation.buildDefaultValidatorFactory (). GetValidator ()" von "javax.validation.Validation" erhalten wurde. ..
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
/*Kürzung*/
@PostMapping("/api/test-post-api")
public void editRelayStructs(
@RequestBody Form form
) {
//Validierungsergebnisse abrufen
Set<ConstraintViolation<Form>> errorResult =
Validation.buildDefaultValidatorFactory().getValidator().validate(form);
/*Kürzung*/
}
Diese Methode kann eine einfache Validierung abdecken. Da diese Methode die Validierung ausführt, ohne Spring zu durchlaufen, gibt es andererseits das Problem, dass die Injektion für selbst erstellte Anmerkungen, die "@ Autowired" sind, nicht funktioniert.
Wie oben erwähnt, funktioniert die von "Validation.buildDefaultValidatorFactory (). GetValidator ()" erhaltene Validator-Klasse nicht mit der Validator-Klasse, die "@ Autowired" ausführt.
@Beispiel für eine automatisch verdrahtete Validator-Klasse
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class ExistingIdValidator implements ConstraintValidator<ExistingId,Integer> {
@Autowired
public Dao dao;
@Override
public boolean isValid(Integer id, ConstraintValidatorContext context) {
if (id == null) {
return true;
}
return /*Ergebnis der Existenzprüfung für ID mit Dao*/;
}
}
In diesem Fall funktioniert "@ Autowired" in der Validator-Klasse durch Injizieren von "@ Autowire", um den "Validator" auf der Federseite zu definieren.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
/*Kürzung*/
//(Ursprünglich sollte das Konstruktormuster injiziert werden.)
@Autowired
public Validator validator; //Javax im Frühjahr definiert.validation.Validator
@PostMapping("/api/test-post-api")
public void editRelayStructs(
@RequestBody Form form
) {
//Validierungsergebnisse abrufen
Set<ConstraintViolation<Form>> errorResult = validator.validate(form);
/*Kürzung*/
}
Recommended Posts