Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为spring验证框架定制验证器_Java_Spring_Spring Boot_Validation - Fatal编程技术网

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注释应用于混凝土控制器中的模型