【发布时间】:2018-03-13 02:14:33
【问题描述】:
我的 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 扩展的接口。
【问题讨论】:
-
为什么验证器需要了解 HTTP 请求?
标签: java spring dependency-injection spring-data-jpa spring-validator