当使用Spring Boot 2.3及以上版本时,可能会遇到hibernate-validator依赖缺失的问题。这是因为Spring Boot 2.3移除了hibernate-validator依赖,而将其替换为了jakarta.validation依赖。因此,在使用hibernate-validator时,需要手动添加jakarta.validation依赖。
以下是解决这个问题的步骤:
步骤一:添加jakarta.validation依赖
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.glassfish.jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.0</version>
</dependency>
这将会添加jakarta.validation-api依赖到项目中。接下来,需要将hibernate-validator依赖替换为jakarta.validation依赖。
步骤二:替换依赖
找到你的项目中的hibernate-validator依赖,并将其替换为jakarta.validation-api依赖。
以下是一个完整的pom.xml文件示例:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.1.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加jakarta.validation依赖 -->
<dependency>
<groupId>org.glassfish.jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 替换hibernate-validator依赖为jakarta.validation依赖 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>7.0.1.Final</version>
</dependency>
</dependencies>
示例1:使用@RequestParam注解参数校验
假设我们有一个接口,接受一个字符串类型的参数,我们使用@RequestParam注解来获取参数,并做校验。使用过程中可能会遇到以下错误:
java.lang.NoSuchMethodError: javax.validation.Validation.byDefaultProvider()Ljavax/validation/Configuration;
通过添加jakarta.validation依赖和替换hibernate-validator依赖的操作,可以解决这个问题。以下是一个正确的例子:
@RestController
public class DemoController {
@GetMapping("/test")
public String test(@RequestParam @NotEmpty String name) {
return "Hello, " + name;
}
}
在上述例子中,我们使用了@RequestParam注解获取参数,并使用@NotEmpty注解来做参数的非空校验。这将会确保传入的参数不为空。
示例2:使用validation-api进行参数校验
在一些情况下,我们可能需要更加复杂的参数校验。我们可以通过使用validation-api来实现这个功能。以下是一个例子:
@RestController
public class DemoController {
@PostMapping("/test")
public String test(@Valid @RequestBody DemoRequest request) {
return "Hello, " + request.getName();
}
static class DemoRequest {
@NotEmpty
private String name;
@Min(18)
private Integer age;
// get, set 省略
}
}
在上述例子中,我们通过使用@Valid注解来对DemoRequest进行参数校验。在DemoRequest中,我们使用@NotEmpty和@Min注解来做参数的非空校验和最小值校验。这将会确保传入的参数不为空,并且年龄大于等于18岁。
以上就是关于“springboot2.3之后hibernate-validator依赖缺失【踩坑】”的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot2.3之后hibernate-validator依赖缺失【踩坑】 - Python技术站