Supponiamo che io ho una classe di entità di esempio in questo modo:Spring MVC - ricerca validatori automaticamente
public class Address {
...
}
e un corrispondente validatore:
@Component
public AddressValidator implements Validator {
@Override
public boolean supports(Class<?> entityClass) {
return entityClass.equals(Address.class);
}
@Override
public void validate(Object obj, Errors errors) {
...
}
}
Quando uso di un controller come il seguente, tutto funziona:
@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) {
...
}
}
Tuttavia, se ometto la parte di registrazione del validatore (cioè il seguente), la convalida non è t eseguito.
@Autowired
private AddressValidator validator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
La registrazione manuale dei validatori sembra inutile. Posso istruire Spring a cercare automaticamente i validatori (come per il modo in cui vengono controllati i controllori)?
È un'applicazione basata su Spring Boot.
stai chiedendo un modo per aggiungere automaticamente 'fagioli contesto Validator' al quadro di convalida primavera? – chrylis
Quando contrassegno un bean come Indirizzo indirizzo con un'annotazione @Valid, vorrei che Spring verificasse automaticamente il validatore corretto tra i bean che implementano l'interfaccia del Validator. C'è una tale funzionalità in primavera? Sembra facile da implementare. In questo modo non avrei bisogno di impostare manualmente il validatore corretto nel metodo initBinder. –
Questa è l'interfaccia Spring 'Validator' e non' javax.validator.Validator'? C'è un motivo per cui non stai utilizzando un validatore JSR-303 personalizzato, magari con un'annotazione personalizzata '@ ValidAddress'? – chrylis