我可以在Spring Boot自定义验证器中自动连线一个存储库吗 [英] Can I Autowired one Repository inside Spring boot custom validator

查看:50
本文介绍了我可以在Spring Boot自定义验证器中自动连线一个存储库吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Spring Boot创建了一个自定义验证器:

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){
            ...
             }
            }

所以在我的验证器中

@Autowired
IQualificacao iQualificacao;

不起作用,如果我将此存储库放在控制器中,则可以正常工作

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

---------------------解决方案(@sanluck的tks)----------

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

我的验证者:

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;

    }
}

并在我的控制器中:

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

    @Autowired
    IQualificacao iQualificacao;

    @InitBinder("aberturaMatricula")
    protected void initAberturaMatriculaBinder(WebDataBinder binder) {
        binder.addValidators(new AberturaMatriculaValidator(iQualificacao));
    }
...
}

推荐答案

向您的应用程序添加 @Configuration ,以注册您的 AberturaMatriculaValidator :

Add @Configuration to your application for registering your AberturaMatriculaValidator:

@Configuration
public class ValidationConfig {

@Autowired
IQualificacao iQualificacao;

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

还必须创建构造函数 AberturaMatriculaValidator(IQualificacao iqualificao).

这篇关于我可以在Spring Boot自定义验证器中自动连线一个存储库吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆