Załóżmy, że mam klasy podmiot próbka tak:Wiosna MVC - wyszukiwanie Walidatory automatycznie
public class Address {
...
}
i odpowiedni walidator:
@Component
public AddressValidator implements Validator {
@Override
public boolean supports(Class<?> entityClass) {
return entityClass.equals(Address.class);
}
@Override
public void validate(Object obj, Errors errors) {
...
}
}
Gdy używam kontroler jak poniżej, wszystko działa:
@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) {
...
}
}
Jednakże, jeśli pominąć walidator zarejestrowaniem część (czyli poniżej), walidacja nie jest t wykonane.
@Autowired
private AddressValidator validator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
Konieczność ręcznej rejestracji walidatorów wydaje się bezcelowa. Czy mogę nakazać Springowi automatyczne sprawdzenie poprawności (podobnie jak sprawdzane są kontrolery)?
Jest to aplikacja oparta na Spring Boot.
Prosisz sposobu, aby automatycznie dodać 'Validator' kontekstu fasoli ramach walidacji Wiosna? – chrylis
Po zaznaczeniu komponentu bean, takiego jak Adres, z adnotacją @Valid, chciałbym, aby Spring automatycznie sprawdził poprawny validator między komponentami bean implementującymi interfejs Validator. Czy jest taka funkcjonalność na wiosnę? Wydaje się łatwe do wdrożenia. W ten sposób nie musiałbym ręcznie ustawiać poprawnego weryfikatora w metodzie initBinder. –
To jest interfejs Spring 'Validator', a nie' javax.validator.Validator'? Czy istnieje powód, dla którego nie używasz niestandardowego walidatora JSR-303, być może z niestandardową adnotacją '@ ValidAddress'? – chrylis