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基础学习之接口详解

    Java基础学习之接口详解 概述 在Java中,接口(interface)是一个相对抽象的概念,它并不是任何一个具体对象的实例,而是一种特殊的类,可以理解为是一种规范,定义了一些方法和属性,但是并不具体实现,因此需要由其他类去实现这些方法和属性。在下文中,我们将详细讲解接口的基本概念、定义方式及使用方法。 接口的定义 在Java中,接口使用interface…

    Java 2023年5月26日
    00
  • 微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决

    针对这个问题,我先介绍一下微信JS-SDK和AngularJS的SPA应用中使用router进行页面跳转的基本概念,然后再讲解如何解决jssdk校验失败问题,最后给出两个示例说明。 微信JS-SDK 微信JS-SDK是一套用于支持公众号网页开发的JavaScript程序,提供了丰富的接口和能力,通过这些接口和能力可以实现例如获取用户信息、分享、支付等功能。开…

    Java 2023年6月15日
    00
  • JavaWeb之Filter过滤器详解

    下面是“JavaWeb之Filter过滤器详解”的完整攻略: 一、Filter过滤器概述 1.1 过滤器基本介绍 Filter是JavaWeb中非常重要的一个概念,可以用于拦截请求、修改响应内容等操作。在Web服务器中,Filter的位置位于Servlet容器和客户端浏览器之间,每个Web应用程序(Web App)都可以定义若干个Filter,用于完成特定的…

    Java 2023年6月15日
    00
  • 用Java进行zip文件压缩与解压缩

    当需要压缩或解压缩文件时,可以使用Java内置库中的ZipFile和ZipEntry类。以下是用Java进行zip文件压缩和解压缩的完整攻略,包含了两个示例。 一、压缩文件 可以使用Java的ZipOutputStream类进行文件压缩,下面是使用ZipOutputStream压缩文件的示例: import java.io.FileOutputStream;…

    Java 2023年5月20日
    00
  • Java基础—数据类型

    数据类型 Java 的两大数据类型:内置数据类型、引用数据类型 内置数据类型 Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 byte、short、int、long、float、double、char、boolean 基本类型 范围 byte: (8位)-128~127 short: (26位)一个sh…

    Java 2023年4月17日
    00
  • uni-app如何实现增量更新功能

    uni-app 是一款基于 Vue.js 的跨平台前端开发框架,支持将同一份代码编译生成多个平台可执行程序(如H5、小程序、App等),可方便地实现大型项目的开发、管理与维护。对于一个中大型项目的开发,增量更新是非常关键的功能,它能够大大缩短用户等待的时间,提高用户体验。本文将详细讲解如何在 uni-app 中实现增量更新功能的攻略。 第一步:使用uni-a…

    Java 2023年5月23日
    00
  • Java Apache Commons报错“ZipSecureFileException”的原因与解决方法

    “ZipSecureFileException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 安全限制:如果压缩文件不符合安全限制,则可能会出现此异常。例如,可能会尝试解压缩未签名的压缩文件或压缩文件包含恶意代码。 文件路径错误:如果文件路径错误,则可能会出现此异常。例如,可能会使用错误的文件路径或文件不存在。 以下是两…

    Java 2023年5月5日
    00
  • 简单了解JavaBean作用及常用操作

    简单了解JavaBean作用及常用操作 JavaBean是一种Java语言写成的可重用组件。它是指符合特定规范的Java类,具有无参构造函数,可以通过工具或代码进行设置和访问属性。 JavaBean的作用 JavaBean的作用是将数据和操作数据的方法封装在一起,形成一个可复用的组件,方便在不同的系统中使用。同时,JavaBean的属性可以使用JavaBea…

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