Spring Boot验证注释@Valid和@NotBlank不起作用

2022-04-06 00:00:00 validation java spring-boot soapui

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

@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;
    }
    
}

我尝试将该应用程序作为一个Spring Boot应用程序运行,方法是右键单击项目(运行方式),并通过SOAPUI为变量isReprint和includdeSignatureAssociates传递空值。然而,验证似乎不起作用,并且没有在SOAPUI中抛出任何验证错误。我遗漏了什么?如有任何帮助,我们将不胜感激!


解决方案

首先,您不需要在UpdatePrintContracts中为那些类变量添加@Valid注释。您可以删除它们。

要触发@控制器输入的验证,只需将输入参数注释为@Valid或@Valiated:

@RequestMapping(value=PATH_PRINT_CONTRACTS, method=RequestMethod.POST)
public ResponseEntity<?> printContracts(@Valid @RequestBody  final UpdatePrintContracts updatePrintContracts) throws Exception {

Refer here,以全面了解验证Spring Boot中的型号。

如果要检查字符串是否只包含特定字符,则必须添加锚点(^表示字符串的开头,$表示字符串的结尾),以确保您的模式与所有字符串匹配。花括号仅用于写入数量,

@Pattern(regexp = "^[\p{Alnum}]{1,32}$")

最后,我假设您的类路径中有以下JAR,

.valify-api.jar(包含抽象API和注释扫描程序)

.hibernate-validator.jar(包含具体实现)

相关文章