springboot2.3之后hibernate-validator依赖缺失【踩坑】

当使用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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 关于Java中使用jdbc连接数据库中文出现乱码的问题

    关于Java中使用JDBC连接数据库中文出现乱码的问题,一般来说是由于编码不一致导致的。下面给出完整的攻略: 问题背景 当我们使用 Java 语言中所提供的 JDBC API 连接数据库时,如果发现 MySQL 数据库中存储的中文字符在程序中被读取后出现了乱码,那么这个问题就需要解决了。 解决方法 1. 在连接字符串中指定编码字符集 实现这个方法,需要在 J…

    Java 2023年5月20日
    00
  • spring基于通用Dao的多数据源配置详解

    以下是对“spring基于通用Dao的多数据源配置详解”的完整攻略。 一、背景 在开发Java Web应用时,经常需要使用多个数据源来存储不同的业务数据。而Spring框架提供了多数据源的支持,通过配置多个数据源并使用通用Dao可以让我们更加方便和高效地实现多数据源的管理。 二、实现步骤 1. 导入依赖 在pom.xml文件中添加以下依赖: <!–通…

    Java 2023年6月3日
    00
  • 详解Java SpringAOP切面类

    下面我来为您详细讲解“详解Java Spring AOP切面类”完整攻略,该攻略包括以下内容: 什么是AOP切面类? Spring AOP的原理是什么? 如何编写一个AOP切面类? 示例1:利用AOP实现日志记录功能 示例2:利用AOP实现权限校验功能 什么是AOP切面类? AOP(Aspect-Oriented Programming)切面编程是面向对象编…

    Java 2023年5月19日
    00
  • Java中动态规则的实现方式示例详解

    这篇文章将详细讲解Java中动态规则的实现方式,并且提供两个示例来帮助读者更好地理解此概念。在开始之前,我们来了解一下动态规则的概念。 什么是动态规则 动态规则是指在程序运行时可以动态地修改规则,而无需重新编译代码。这种实现方式增加了程序的灵活性和可维护性,而且不会影响程序的可靠性和性能。 Java中动态规则的实现方式有很多种,下面我们就来看两个示例。 示例…

    Java 2023年5月18日
    00
  • 深入讲解Java的对象头与对象组成

    深入讲解Java的对象头与对象组成 在Java中,每个对象都有一个对象头,用来存储对象的元数据信息,同时Java对象也由对象头和实例数据两个部分组成。了解Java对象的组成可以帮助我们更好地理解Java的内存模型。 Java对象的组成 Java对象是由对象头和实例数据两个部分组成的。在64位JVM中,对象头占用16Byte,实例数据大小不定,但至少为8Byt…

    Java 2023年5月26日
    00
  • JAVA生成pdf文件的实操指南

    JAVA生成PDF文件的实操指南 简介 PDF是一种非常流行的电子文档格式,很多公司和机构都会使用它作为文档的传播方式。对于JAVA开发者来说,生成PDF文件是一个常见的需求。在本篇指南中,我们将介绍如何使用JAVA生成PDF文件的方法,并提供两个示例帮助你更好地理解。 准备工作 在开始生成PDF文件之前,你需要确保以下的环境和工具已经准备就绪: Java …

    Java 2023年5月19日
    00
  • Spring 与 JDK 线程池的简单使用示例详解

    下面是Spring与JDK线程池的简单使用示例详解的攻略。 Spring与JDK线程池的简单使用示例详解 什么是线程池 线程池是一种多线程的解决方案,它的核心思想是在应用程序启动的时候,提前创建若干个线程并放入线程池中,并维护这些线程的生命周期,应用程序需要处理任务的时候,不需要再临时创建新的线程,而是从线程池中获取可用的线程。 JDK线程池的使用 Java…

    Java 2023年5月18日
    00
  • JavaSpringBoot报错“SystemException”的原因和处理方法

    原因 “SystemException” 错误通常是以下原因引起的: 事务问题:如果您的事务存在问题,则可能会出现此错误。在这种情况下,需要检查您的事务并确保它们正确。 数据库问题:如果您的数据库存在问题,则可能会出现此错误。在这种情况下,需要检查您的数据库并确保它们正确。 并发问题:如果您的应用程序存在并发问题,则可能会出现此错误。在这种情况下,您需要检查…

    Java 2023年5月4日
    00
合作推广
合作推广
分享本页
返回顶部