【发布时间】:2016-04-02 01:27:24
【问题描述】:
我使用 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));
}
...
}
【问题讨论】:
-
IoC 仅适用于 Spring 管理的 bean。您的自定义验证器不是一个。
-
那么,当我需要进入数据库时,如何验证一些值?我试图在我的控制器中自动连接验证器,但没有成功
-
需要在Spring中注册验证器。检查this。在此之后,您应该能够在验证器中自动装配东西。
-
@damobros 是的,但我需要知道这是哪里来的。例如我的基类,如果字段在对象内的对象中,我需要知道基类,我该怎么做?
标签: java spring-boot