我有一个应用程序级服务
如下:
@Service
public class DatasetApplicationService {
private DatasetRepository datasetRepository;
@Autowired
public DatasetApplicationService(DatasetRepository datasetRepository) {
this.datasetRepository = datasetRepository;
}
@Transactional
public Dataset createDataset(@Valid CreateDatasetCommand newDatasetParams) {
...
}
}
看看DatasetApplicationService.createDataset
方法,参数CreateDatasetCommand
被发送给它,并带有注释@Valid
。当调用该方法时,可以触发注释来验证 CreateDatasetCommand
(请参阅 spring boot bean validation)。
我的问题是我可以为特定参数提供自定义 validator 吗?例如,我有一个实现 org.springframework.validation.Validator 的 CreateDatasetCommandValidator ,我想在调用该方法之前触发此 validator 。
<小时/>我用InitBinder
做了一些研究,但在这个过程中似乎没有触发,失败的例子是:
@Service
public class DatasetApplicationService {
private DatasetRepository datasetRepository;
private CreateDatasetCommandValidator validator;
@InitBinder // <----- this is not triggered
protected void initBinder(DataBinder binder) {
binder.setValidator(validator);
}
@Autowired
public DatasetApplicationService(DatasetRepository datasetRepository,
CreateDatasetCommandValidator validator) {
this.datasetRepository = datasetRepository;
this.validator = validator;
}
@Transactional
public Dataset createDataset(@Valid CreateDatasetCommand newDatasetParams) {
...
}
}
最佳答案
Controller收到的每个请求,都会调用@InitBinder方法,以避免调用我们在其中定义的值的每个请求。
@InitBinder(value="user")
public void anyName(WebDataBinder binder){
binder.xxx()
}
- Autowiring validator 。
- 将 validator 添加到 InitBinder。
- 将@Valid注释应用于具体 Controller 中的模型。
关于java - 为 Spring 验证框架定制 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152901/