我的Spring API验证器有以下代码。
@Component
public class EventValidator implements Validator {
@Autowired
private EventRepository eventRepository;
@Override
public boolean supports(Class<?> clz) {
return Event.class.equals(clz);
}
@Override
public void validate(Object o, Errors errors) {
...
}
}
我在我的控制器中使用autowire将此验证器添加到绑定中,如下所示:
@RestController
@RequestMapping("/events")
public class EventController {
@Autowired
private EventService eventService;
@Autowired
private EventValidator eventValidator;
...
@InitBinder("event")
protected void initBinder(WebDataBinder binder) {
binder.addValidators(eventValidator);
}
}
它是否正确?我问的原因是我看到很多在线实例实际上是通过新实例添加验证器
@InitBinder("event")
protected void initBinder(WebDataBinder binder) {
binder.addValidators(new EventValidator());
}
我的问题是:
1)我可以使用自动装配方式吗?如果不是,为什么我必须得到一个新实例?
2)如果我们必须做一个新实例,我如何在其中自动装配我的存储库接口以进行验证?我的存储库是一个从Spring Data JPA扩展的接口。
1.如果你引用this,你会发现addValidators()
方法接受一系列验证器并调用assertValidators()
方法执行NULL检查和IllegalState异常检查。之后,在FINAL字段验证器中添加验证器数组,其类型为List。
所以,回答你的第一个问题是自动装配应该在这里工作。每次创建新对象在这里没有任何意义。