我下面有一个Application Level Service
:
@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)。
我的问题是我可以为特定参数提供定制的验证器吗?例如,我有一个CreateDatasetCommandValidator
,它实现了org.springframework.validation.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) {
...
}
}
答案 0 :(得分:1)
Controller收到的每个请求,都会调用@InitBinder方法,以避免为我们在其中定义值的每个请求调用。
@InitBinder(value="user")
public void anyName(WebDataBinder binder){
binder.xxx()
}