以下是我的主控制器,我从中调用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;
}
}
我试图通过右键单击项目(运行方式)将应用程序作为Spring启动应用程序运行,并通过Soap UI传递变量isReprint和includeSignatureCoordinates的空白值。但是,验证似乎不起作用,并且不会在Soap UI上抛出任何验证错误。我错过了什么?任何帮助表示赞赏!
答案 0 :(得分:42)
如果您在最新版本的Spring Boot(2.3.0)中遇到此问题,请确保添加以下依赖项:
#!/usr/bin/env bash
seq 4 | perl -pe '
BEGIN {
open CSV, shift; # Open test_file.csv
<CSV>; # Ignore first line
# Get line number and command
($n, $c) = <CSV> =~ /^(?:[^,]+,){2}([^,]+),(.*)/;
}
{ s/.*/$c/ if ($. == $n); } # Replace line with number $n
' test_file.csv
观察:
在早期版本的Spring Boot(1.4.7)中,<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
可以直接使用。但是,升级到最新版本后,注释破裂了。单独添加以下依赖项无效:
javax.validation
因为这提供了JSR规范,但没有提供实现。您也可以使用<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
代替hibernate-validator
。
答案 1 :(得分:15)
对于任何在 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>
答案 2 :(得分:6)
首先,您不需要在UpdatePrintContracts中为这些类变量添加@Valid注释。你可以删除它们。
要触发@Controller输入的验证,只需将输入参数注释为@Valid或@Validated:
@RequestMapping(value=PATH_PRINT_CONTRACTS, method=RequestMethod.POST)
public ResponseEntity<?> printContracts(@Valid @RequestBody final UpdatePrintContracts updatePrintContracts) throws Exception {
Refer here充分了解弹簧启动时的验证模型。
如果要检查字符串是否只包含特定字符,则必须添加锚点(^表示字符串的开头,$表示字符串的结尾),以确保您的模式匹配所有字符串.Curly括号是只写一个数量,
@Pattern(regexp = "^[\\p{Alnum}]{1,32}$")
最后,我假设您在类路径中有以下jar,
.validation-api.jar(包含抽象API和注释扫描程序)
.hibernate-validator.jar(包含具体实现)
答案 3 :(得分:2)
这适用于在执行上述步骤后仍然遇到相同问题的任何人。我必须重新启动我的 IDE (IntelliJ) 才能使更改生效。
答案 4 :(得分:1)
我遇到了同样的错误。
我不得不单独使用以下 2 个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
并在rest控制器级别使用@Validated
注解(import org.springframework.validation.annotation.Validated),在方法参数级别使用@Valid
注解(import javax.validation.Valid)
如果有任何其他额外的依赖项,如 javax.validation.validation-api
、org.hibernate.hibernate-validator
等,那么验证对我不起作用。所以确保你从 pom.xml 中删除这些依赖
答案 5 :(得分:0)
我在Spring Boot中使用的是验证的这种依赖关系,并且无效,
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
我将其替换为spring-boot-starter-validation,并且有效。
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-
starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.4.0</version>