下面给出的是我的主要控制器
@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;
}
}
我试图通过右键单击项目(运行AS(并传递变量的空白值 ISREPRINT and includeignatureCoorDinates 通过SOAP通过SOAP,我正在尝试将应用程序作为春季启动应用程序运行UI。但是,该验证似乎不起作用,也没有在SOAP UI中丢弃任何验证错误。我想念什么?任何帮助都将不胜感激!
如果在最新版本的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-validator
而不是spring-boot-starter-validation
。
对于> 2.0.1.final 获得此问题的任何人:
在2.2上方的所有Springboot版本中
在这里检查注释
因此,您要做的就是在build.gradle/pom file
中添加此依赖项gradle:
implementation 'org.springframework.boot:spring-boot-starter-validation'
maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
我面临相同的错误。
我必须仅使用以下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>
并使用@Validated
注释(import org.springframework.validation.annotation.validation.validation(在REST控制器级别和方法参数级别的@Valid
注释(import Javax.validation.valid.valid(
如果还有其他额外的依赖项,例如javax.validation.validation-api
,org.hibernate.hibernate-validator
等,那么验证效果停止为我工作。因此,请确保从pom.xml
首先从pom.xml
首先,您不需要在UpdatePrintContract中对这些类变量进行@VALID注释。您可以删除它们。
要触发@controller输入的验证,只需注释输入参数为@valid或@validated:
@RequestMapping(value=PATH_PRINT_CONTRACTS, method=RequestMethod.POST)
public ResponseEntity<?> printContracts(@Valid @RequestBody final UpdatePrintContracts updatePrintContracts) throws Exception {
请参阅此处的全面了解春季启动中的验证模型。
并且,如果要检查字符串仅包含特定字符,则必须添加锚点(^为String的启动,字符串的末端$(以确保您的tatter与所有字符串匹配。仅写数量,
@Pattern(regexp = "^[\p{Alnum}]{1,32}$")
最后,我认为您在类Path中有关注罐子,
.validation-api.jar(包含抽象API和注释扫描仪(
.hibernate-validator.jar(包含具体实现(
i在春季启动中使用这种验证的依赖性,并且不起作用,
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
我用弹簧启动器验证替换了它,它起作用了。
<!-- 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>
这是针对此处遵循上述步骤后仍然存在相同问题的任何人。我必须重新启动我的IDE(Intellij(才能生效。
请确保在@requestbody
之前先使用@Valid注释对于较新版本的春季启动,请确保从jakarta.validation.*
软件包而不是javax.validation.*
选择所有验证注释。由于注释在这两个中都命名相同。
我解决了我的问题。当我们使用类也需要验证的类中的类时,因此在这种情况下需要注释@Valid
。链接以获取更多详细信息
step-1:在pom.xml文件中添加这两个依赖项
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
step-2:创建一个自定义异常类
package com.bjit.salon.auth.service.exceptions;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.stream.Collectors;
@ControllerAdvice
public class AnynameApplicationException {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseEntity<List<String>> processUnmergeException(final
MethodArgumentNotValidException ex) {
List<String> list = ex.getBindingResult().getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
return new ResponseEntity<>(list, HttpStatus.BAD_REQUEST);
}
}
步骤3:将@Valid注释添加到这样的方法参数
public ResponseEntity<?> registerAccount(@Valid @RequestBody UserRegisterDto
registerDto) {
// rest of the codes
}
如果您使用的是弹簧版&gt;3
使用kotlin,您应该添加@field:注释
ex:
@field:NotEmpty
@field:NotNull
@field:NotBlank(message = "Email is required")
@field:Email(message = "Please provide a valid email")
val email: String,
@field:NotEmpty
@field:NotNull
@field:NotBlank(message = "Password is required")
val password: String,
您必须在pom.xml
中添加此依赖项<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
注意:快照,M1,M2,M3和M4释放通常正在进行中。春季团队仍在处理他们,建议不要使用它们。
将此依赖项添加到您的 pom.xml 文件和 @notblank,@notnull,@valid 等。应该正常工作。
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
对于像我这样的任何人使用Spring Boot 3.x。
jackarta更新后,您必须包括额外的配置,以便请求车身验证才能正常工作。(即使没有额外的配置,字段验证也可以正常工作(
最后我需要的只是
@Configuration
public class ValidationConfiguration {
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
}
和implementation 'org.springframework.boot:spring-boot-starter-validation'
建议使用Spring Boot Maven/gradle插件,因此没有版本差异
我的Kotlin Spring Boot中的实体相同的问题.x应用程序。
通过在字段上添加 spring-boot-starter-validation
依赖关系并添加氧气 @field:NotBlank
(或 @field:NotNull
, @field:NotEmpty
(来解决。
我也有相同的问题对我添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
在弹簧引导 - 启动依赖性问题下解决了问题。为了确保您应该直接生成依赖性,并使用验证表格开始弹簧io。值得一提的是,pom文件中的依赖依赖顺序至关重要
您可以使用@notempty会检查空白和null值。将@valid添加到您的RESTCONTOLLER类方法