Angenommen, ich habe eine Beispielentitätsklasse wie folgt:
%Vor%und ein entsprechender Validator:
%Vor%Wenn ich einen Controller wie den folgenden verwende, funktioniert alles:
%Vor%Wenn ich jedoch den Validator-Registrierungsteil (d. h. den folgenden) weglasse, wird die Validierung nicht durchgeführt.
%Vor%Es ist sinnlos, Validatoren manuell registrieren zu müssen. Kann ich Spring anweisen, Validatoren automatisch nachzuschlagen (ähnlich wie Controller nachgeschlagen werden)?
Es ist eine Spring Boot-basierte Anwendung.
Sie können mein Beispiel aus gist oder darunter verwenden. Die Idee ist, einen CompositeValidator zu haben, der alle Ihre Validator- oder SmartValidator-Instanzen enthält.
Es unterstützt Hinweise und kann auch in Hibernate Annotation Validator (LocalValidatorFactoryBean) integriert werden. Und es ist auch möglich, mehr als einen Validator pro spezifischem Modell zu haben.
CompositeValidator.java
%Vor%SomeController.java
%Vor%Java-Konfiguration
%Vor%Oder XML-Konfiguration
%Vor%Sie können den globalen Validator konfigurieren.
Wenn Sie eine Java-basierte Spring-Konfiguration mit WebMvcConfigurationSupport verwenden, können Sie getValidator ()
überschreiben %Vor%Sie können setValidator (Validator) im globalen WebBindingInitializer aufrufen. Auf diese Weise können Sie eine Validator-Instanz für alle @Controller-Klassen konfigurieren. Dies kann einfach mit dem Spring MVC-Namespace erreicht werden:
%Vor%Ich habe dafür keine Spring-Lösung gefunden, aber hier ist was ich tue.
Ich deklariere meine validator-Beans in der Spring-Java-Konfiguration wie folgt:
%Vor%Dann habe ich alle Controller einen Basiscontroller wie folgt erweitert:
%Vor%Die konkrete Klasse dieses Controllers ruft die Liste über die Abhängigkeitsinjektion auf, wie folgt:
%Vor%Der Basis-Controller verwendet die Callback-Methode @InitBinder, um alle Validatoren zu registrieren.
Ich bin überrascht, dass Spring nicht automatisch alle Objekte im Klassenpfad registriert, die die Validator-Schnittstelle implementieren.
Tags und Links java spring spring-mvc validation