簡體   English   中英

我可以在 Spring boot 自定義驗證器中自動連接一個存儲庫嗎

[英]Can I Autowired one Repository inside Spring boot custom validator

我使用 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());
    }
}

並將他添加到我的控制器中:

@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;

不工作,如果我把這個存儲庫放在我的控制器中,工作正常

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

我的驗證器:

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

@Configuration
public class ValidationConfig {

@Autowired
IQualificacao iQualificacao;

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

您還必須創建構造函數AberturaMatriculaValidator(IQualificacao iqualificao)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM