Java 为spring验证框架定制验证器
我有一个Java 为spring验证框架定制验证器,java,spring,spring-boot,validation,Java,Spring,Spring Boot,Validation,我有一个应用程序级服务如下: @Service public class DatasetApplicationService { private DatasetRepository datasetRepository; @Autowired public DatasetApplicationService(DatasetRepository datasetRepository) { this.datasetRepository = datasetRepository;
应用程序级服务
如下:
@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
(请参阅)
我的问题是,我可以为特定的参数提供一个定制的验证器吗。例如,我有一个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) {
...
}
}
@服务
公共类数据集应用程序服务{
私有数据存储数据存储;
私有CreateDatasetCommandValidator验证程序;
@InitBinder/控制器接收到的每个请求都将调用@InitBinder方法,以避免调用我们在其中定义值的每个请求
@InitBinder(value="user")
public void anyName(WebDataBinder binder){
binder.xxx()
}
- 验证器的自动连线
- 将验证器添加到InitBinder
- 将@Valid注释应用于混凝土控制器中的模型