2

I Create one Custom Validator with Spring Boot:

public class AberturaMatriculaValidator implements Validator {
    @Autowired
    IQualificacao iQualificacao;
    @Override
    public boolean supports(Class<?> clazz) {
        return AberturaMatricula.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {//TODO Necessita Validações mais complexas, como verificar se o valor existe em uma determinada lista e tal.
        AberturaMatricula obj = (AberturaMatricula) target;
        List<TbQualificacao> qualificacaoList = iQualificacao.findByNatureza("IMOVEIS");
        System.out.println(qualificacaoList.size());
    }
}

and add he in my Controller:

@RestController
            @RequestMapping("/ri")
            public class RIController {
            @InitBinder("aberturaMatricula")
                protected void initAberturaMatriculaBinder(WebDataBinder binder) {
                    binder.addValidators(new AberturaMatriculaValidator());
                }

            @RequestMapping(value =  "/selo/abertura/", method = RequestMethod.POST)
                public AberturaMatricula selarAbertura(@RequestBody @Valid AberturaMatricula aberturaMatricula){
            ...
             }
            }

So inside my validator the

@Autowired
IQualificacao iQualificacao;

don`t work, if I put this repository in my controller, works fine

---------------------SOLUTION (tks for @sanluck)----------

My validator:

public class AberturaMatriculaValidator implements Validator {

    private IQualificacao iQualificacao;

    public AberturaMatriculaValidator(IQualificacao iQualificacao) {
        this.iQualificacao = iQualificacao;
    }

    @Override
    public boolean supports(Class<?> clazz) {

        return AberturaMatricula.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {//TODO Necessita Validações mais complexas, como verificar se o valor existe em uma determinada lista e tal.
        AberturaMatricula obj = (AberturaMatricula) target;

    }
}

and in my controller:

@RestController
@RequestMapping("/ri")
public class RIController {

    @Autowired
    IQualificacao iQualificacao;

    @InitBinder("aberturaMatricula")
    protected void initAberturaMatriculaBinder(WebDataBinder binder) {
        binder.addValidators(new AberturaMatriculaValidator(iQualificacao));
    }
...
}
Fabio Ebner
  • 2,613
  • 16
  • 50
  • 77
  • IoC only works on beans managed by Spring. Your custom validator isn't one. – dambros Apr 02 '16 at 01:34
  • So, how can I validate some value when I need to get in DB? I trying to autowire the Validator in my Controller, but with no success – Fabio Ebner Apr 02 '16 at 01:40
  • You need to register the validator in Spring. Check [this](http://stackoverflow.com/questions/3587317/autowiring-a-service-into-a-validator). After this, you should be able to autowire things inside the validator. – dambros Apr 02 '16 at 01:43
  • @damobros Yes, but I need to know where this come. for example my base class, if the field is in object inside objet, I need to know the Base class, how can I does this? – Fabio Ebner Apr 02 '16 at 03:03

1 Answers1

1

Add @Configuration to your application for registering your AberturaMatriculaValidator:

@Configuration
public class ValidationConfig {

@Autowired
IQualificacao iQualificacao;

@Bean
public AberturaMatriculaValidator aberturaMatriculaValidator() {
    return new AberturaMatriculaValidator(iQualificacao);
}
}

Also you must create constructor AberturaMatriculaValidator(IQualificacao iqualificao).

sanluck
  • 1,544
  • 1
  • 12
  • 22
  • But and here? @InitBinder("aberturaMatricula") protected void initAberturaMatriculaBinder(WebDataBinder binder) { binder.addValidators(new AberturaMatriculaValidator()); } – Fabio Ebner Apr 02 '16 at 13:14