springboot 2.3之后消失的hibernate-validator解决方法

yizhihongxing

下面是详细的攻略:

问题背景

在Spring Boot 2.3版本之后,引入了一个新的starter库,名为validation-starter,用于提供Java Bean的数据校验功能。同时,hibernate-validator也被移出了Spring Boot的核心依赖,这导致运行时找不到这个库,会报出ClassNotFoundException的错误。

解决方法

为了解决这个问题,我们需要手动引入hibernate-validator库,并且排除掉validation-starter库的依赖。下面是具体的步骤:

1. 在pom.xml文件中添加依赖

<dependencies> 标签中添加下面的依赖:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
</dependency>

2. 排除validation-starter库的依赖

<dependencies> 标签中添加下面的配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 引入自定义的ValidatorConfiguration

在启动类(如Application.java)上添加注解,指定需要使用自定义的ValidatorConfiguration类:

@SpringBootApplication
@Import(ValidatorConfiguration.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这个自定义类做的是,设置Validation的Bean桥URI,以解决在2.3之后无法自动配置的问题。

@Configuration
public class ValidatorConfiguration {

    @Bean
    public LocalValidatorFactoryBean localValidatorFactoryBean() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(validationMessageSource());
        bean.setProviderClass(HibernateValidator.class);
        return bean;
    }

    @Bean
    public MessageSource validationMessageSource() {
        ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();
        bean.setBasename("classpath:ValidationMessages");
        bean.setDefaultEncoding("UTF-8");
        return bean;
    }

    @Bean
    public Validator validator() {
        return localValidatorFactoryBean();
    }
}

其中主要是设置了默认的ValidationMessages.properties文件的位置和编码格式。

示例

为了更好的理解上面的步骤,下面给出两个示例:

示例1:在Controller中使用数据校验

在Controller中,我们需要使用@Valid注解来使Spring自动执行数据校验,例如:

@RestController
public class UserController {

    @PostMapping("/users")
    public User createUser(@Valid @RequestBody User user) {
        // some logic
    }

}

这里的@Valid注解需要使用我们手动引入的hibernate-validator库中的注解,才能起到校验数据的作用。

示例2:定义数据校验规则

我们定义一个User类,希望校验其中的年龄age属性必须大于等于18岁。具体实现如下:

public class User {

    private String name;

    @Min(value = 18, message = "必须大于等于18岁")
    private int age;

    // getters and setters
}

这里使用了hibernate-validator库中的@Min注解来定义年龄的最小值,并设置了错误提示信息。当使用@Valid注解校验User对象时,如果age小于18,会抛出ConstraintViolationException异常,并且包含错误提示信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot 2.3之后消失的hibernate-validator解决方法 - Python技术站

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

相关文章

  • 详解SpringBoot配置连接池

    Spring Boot是一个快速创建Web应用程序的框架,它提供了许多便捷的功能和工具,其中包括连接池。连接池是一种管理数据库连接的技术,它可以提高应用程序的性能和可伸缩性。下面是详解Spring Boot配置连接池的完整攻略: 添加依赖项 首先,我们需要在pom.xml文件中添加连接池依赖项。Spring Boot支持多种连接池,包括HikariCP、To…

    Java 2023年5月14日
    00
  • Spring学习JdbcTemplate数据库事务参数

    下面就是关于“Spring学习JdbcTemplate数据库事务参数”的完整攻略: 1. JdbcTemplate概述 JdbcTemplate是Spring框架中一个非常重要的核心组件,它为开发者提供了非常方便的方式进行数据访问操作。它提供了完善的JDBC功能支持,并简化了JDBC代码的编写。JdbcTemplate底层实现了对JDBC进行封装和简化,更加…

    Java 2023年5月20日
    00
  • Java命名规则详细总结

    Java命名规则详细总结 Java是一门强类型语言,命名规则是Java语言编写中一个非常重要的方面。正确的命名规则可以使代码更易于理解和维护。本文将详细总结Java命名规则,包括标识符的命名规则和Java类库的命名规则。 标识符的命名规则 在Java编程中,标识符是变量、常量、方法、类等的名称,合法的标识符应该遵循以下规则: 标识符只能由字母、数字和下划线(…

    Java 2023年5月26日
    00
  • springboot与mybatis整合实例详解(完美融合)

    Spring Boot和MyBatis是两个非常流行的Java框架,它们可以很好地协同工作。在本攻略中,我们将详细讲解如何将Spring Boot和MyBatis整合,以及如何使用它们来构建一个完整的Web应用程序。 添加依赖 首先,我们需要在pom.xml文件中添加Spring Boot和MyBatis的依赖。以下是一个示例: <dependenci…

    Java 2023年5月14日
    00
  • Win10系统下配置java环境变量的全过程

    下面是Win10系统下配置java环境变量的全过程: 下载JDK安装包 在Oracle官网上下载自己所需的JDK安装包,下载地址:https://www.oracle.com/java/technologies/javase-jdk15-downloads.html 安装JDK 运行JDK安装包,按照默认设置一路下一步,最后点击“完成”即可。 查看Java安…

    Java 2023年5月24日
    00
  • 在Spring中使用JDBC和JDBC模板的讲解

    下面我将为您详细讲解在Spring中使用JDBC和JDBC模板的完整攻略。 什么是JDBC? Java数据库连接(JDBC)是一种Java API,用于与关系数据库进行交互。它提供了一种标准的方法来与数据库进行通信,使得Java程序员可以轻松地与各种数据库进行交互,如MySQL,Oracle和Microsoft SQL Server等。 在Spring中使用…

    Java 2023年5月20日
    00
  • Java中的反射,枚举及lambda表达式的使用详解

    “Java中的反射,枚举及lambda表达式的使用详解”是一个广泛应用于Java编程中的话题。本文将从三个方面详细介绍这三个重要的概念。 反射的使用 反射是Java中一种重要的机制,可以在运行时获取并操作类的信息。用反射可以动态地操作对象的成员变量、方法、构造函数和其他属性。以下是使用反射的基本步骤: 步骤1:获取类的Class对象 要使用反射,需要获取Cl…

    Java 2023年5月26日
    00
  • Java日期转换注解配置date format时间失效

    Java中日期的转换是非常常见的操作,通常在开发过程中使用注解方式进行转换。然而,如果注解的配置中没有设置正确的date format,那么转换结果就会出现问题。本文将为您详细讲解如何解决Java日期转换注解配置date format时间失效的问题。 问题分析 在Java开发过程中,我们经常会用到注解来进行日期的转换,例如将java.util.Date类型转…

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