@Valid和@NotBlank的弹簧启动验证注释不起作用

2022-09-01 02:13:49

下面给出的是我的主控制器,我从中调用getPDFDetails方法。

@RequestMapping(value=PATH_PRINT_CONTRACTS, method=RequestMethod.POST)
    public ResponseEntity<?> printContracts(@RequestBody final UpdatePrintContracts updatePrintContracts) throws Exception {
    
        System.out.println("contracts value is "+ updatePrintContracts);
        
        Integer cancellationReasons = service.getPDFDetails(updatePrintContracts);
        
        System.out.println("success!");
        
        return ResponseEntity.ok(cancellationReasons);
    }   

下面是 UpdatePrintContracts 类,我在其中定义了所有带有验证注释和相应 getter/setter 方法的变量。

public class UpdatePrintContracts {
    
    @Valid
    @NotBlank
    @Pattern(regexp = "\\p{Alnum}{1,30}")
    String isReprint;
    
    @Valid
    @NotBlank
    Integer dealerId;
    
    @Valid
    @NotBlank
    @Pattern(regexp = "\\p{Alnum}{1,30}")
    String includeSignatureCoordinates;
    
    @Valid
    @NotBlank
    java.util.List<Integer> contractNumbers;

    public String getIsReprint() {
        return isReprint;
    }

    public void setIsReprint(String isReprint) {
        this.isReprint = isReprint;
    }

    public Integer getDealerId() {
        return dealerId;
    }

    public void setDealerId(Integer dealerId) {
        this.dealerId = dealerId;
    }

    public String getIncludeSignatureCoordinates() {
        return includeSignatureCoordinates;
    }

    public void setIncludeSignatureCoordinates(String includeSignatureCoordinates) {
        this.includeSignatureCoordinates = includeSignatureCoordinates;
    }

    public java.util.List<Integer> getContractNumbers() {
        return contractNumbers;
    }

    public void setContractNumbers(java.util.List<Integer> contractNumbers) {
        this.contractNumbers = contractNumbers;
    }
    
}

我正在尝试通过右键单击项目(运行方式)并通过Soap UI传递变量空白值来将应用程序作为Spring Boot应用程序运行。但是,验证似乎不起作用,并且不会在 Soap UI 中引发任何验证错误。我错过了什么?任何帮助是值得赞赏的!


答案 1

如果您在最新版本的 Spring boot (2.3.0) 中遇到此问题,请确保添加以下依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

观察:在早期版本的Spring Boot(1.4.7)中,用于开箱即用。但是,在升级到最新版本后,注释中断了。单独添加以下依赖项不起作用:javax.validation

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

因为这提供了 JSR 规范,但没有提供实现。您也可以使用 代替 。hibernate-validatorspring-boot-starter-validation


答案 2

对于在 2.0.1.Final 中遇到此问题的任何人:

在2.2以上的所有SpringBoot版本中,Validations starter不再是Web Starter的一部分。

在此处查看注释

因此,您所要做的就是在build.gradle/pom文件中添加此依赖项。

格雷德尔:

implementation 'org.springframework.boot:spring-boot-starter-validation'

马文

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

推荐