Olá, Vi na internet e em um tópico desse fórum que para criar validações customizadas , normalmente se cria uma anotação e uma outra classe para a regra de validação. Porém achei um pouco complexo e trabalhoso. Nos estudos que fiz a alguns meses de Spring MVC vi que as validaçoes customizadas de formulário são feitas criando uma classe que implementa a interface Validator do spring, onde estaria a regra de validaçao, e registrando esse validador no controller. Testei essa solução para uma API e funcionou legal. O validador disparou um MethodArgumentNotValidException que foi tratado pelo ControllerAdvice normalmente. Essa seria uma solução válida também para validações customizadas? Teria alguma limitaçao? Poderia utilizá-la para validações customizadas de APIs? No caso de um objeto que possui duas datas(início e fim de vigencia) seria uma boa utilizar essa abordagem para validar se a data de início que está sendo passada é realmente anterior a data de fim?
public class Form {
private String campo1;
public String getCampo1() {
return campo1;
}
public void setCampo1(String campo1) {
this.campo1 = campo1;
}
}
public class ValidacaoCustomizada implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Form.class.equals(clazz);
}
@Override
public void validate(Object target, Errors e) {
e.rejectValue("campo1", "1", "Campo rejeitado");
}
}
@Controller
@RequestMapping("/teste")
public class TesteController {
@PostMapping
public ResponseEntity<String> teste(@RequestBody @Valid Form form){
return ResponseEntity.ok("bla bla");
}
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new ValidacaoCustomizada());
}
}