Angenommen, ich habe eine Probe Entitätsklasse wie folgt aus:Spring MVC - Lookup-Validierer automatisch
public class Address {
...
}
und eine entsprechende Validierer:
@Component
public AddressValidator implements Validator {
@Override
public boolean supports(Class<?> entityClass) {
return entityClass.equals(Address.class);
}
@Override
public void validate(Object obj, Errors errors) {
...
}
}
Wenn ich einen Controller wie die folgenden verwenden, alles funktioniert:
@RestController
@RequestMapping("/addresses")
public class AddressController {
@Autowired
private AddressValidator validator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
@RequestMapping(method=POST)
public Long addNewAddress(@Valid @RequestBody Address address) {
...
}
}
Wenn ich jedoch den Validierer registrieren Teil (dh die folgenden), ist die Validierung nein t durchgeführt.
@Autowired
private AddressValidator validator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
Das manuelle Registrieren von Validatoren scheint sinnlos. Kann ich Spring anweisen, Validatoren automatisch nachzuschlagen (ähnlich wie Controller nachgeschlagen werden)?
Es ist eine Spring Boot-basierte Anwendung.
Sie sich für eine Art und Weise zu fragen automatisch 'Validator' Kontext Bohnen für die Frühjahrstagung des Validation Framework hinzufügen? – chrylis
Wenn ich eine Bean wie Adressadresse mit einer Annotation @Valid markiere, möchte ich, dass Spring automatisch den richtigen Validierer zwischen Beans sucht, die die Validator-Schnittstelle implementieren. Gibt es im Frühjahr solche Funktionen? Scheint einfach zu implementieren. Auf diese Weise würde ich den richtigen Validator nicht manuell in der initBinder-Methode festlegen müssen. –
Dies ist die Spring 'Validator'-Schnittstelle und nicht' javax.validator.Validator'? Gibt es einen Grund, warum Sie keinen benutzerdefinierten JSR-303-Validator verwenden, vielleicht mit einer benutzerdefinierten '@ ValidAddress'-Annotation? – chrylis