Spring MVC - Validatoren automatisch suchen

9

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.

    
Dušan Rychnovský 07.03.2015, 14:29
quelle

3 Antworten

2

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%     
Ievgen Pianov 30.03.2016 22:56
quelle
1

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%     
mavarazy 08.03.2015 07:48
quelle
0

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.

    
Vladimir 30.03.2016 19:51
quelle

Tags und Links