2016-04-02 21 views
1

我創建一個自定義驗證與春季啓動:我能自動連接一個庫春天開機自定義驗證內部

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; 

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

--------------------- SOLUTION(TKS爲@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)); 
    } 
... 
} 
+0

IoC僅適用於Spring管理的bean。你的自定義驗證器不是一個。 – dambros

+0

那麼,如何在需要獲取數據庫時驗證某些值?我試圖在我的Controller中自動驗證Validator,但沒有成功 –

+0

您需要在Spring中註冊驗證器。檢查[this](http://stackoverflow.com/questions/3587317/autowiring-a-service-into-a-validator)。在此之後,你應該能夠在驗證器內部自動裝入東西。 – dambros

回答

1

添加@Configuration到您的應用程序註冊您AberturaMatriculaValidator

@Configuration 
public class ValidationConfig { 

@Autowired 
IQualificacao iQualificacao; 

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

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

+0

但是,在這裏? @InitBinder(「aberturaMatricula」) protected void initAberturaMatriculaBinder(WebDataBinder binder){binder.addValidators(new AberturaMatriculaValidator()); } –