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

下面是详细的攻略:

问题背景

在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日

相关文章

  • PHP扩展之kafka安装应用案例详解

    PHP扩展之kafka安装应用案例详解 介绍 Kafka是一个高性能、可扩展、分布式消息引擎系统。本文将介绍PHP扩展Kafka的安装和应用案例。 安装 1. 安装librdkafka PHP扩展Kafka依赖于librdkafka库,需要先安装该库。 # 安装步骤 $ git clone https://github.com/edenhill/librdk…

    Java 2023年5月20日
    00
  • 如何成为一个优秀的jsp程序员

    如何成为一个优秀的JSP程序员 1. 学习JSP基础知识 要成为一个优秀的JSP程序员,首先需要掌握JSP基础知识,如JSP语法、JSP指令、JSP标签库、JavaBean和EL表达式等。建议可以先通过阅读JSP相关的书籍或在线课程进行学习,同时也可以自己动手编写一些简单的JSP程序来加深理解。另外,还需要对Java基础语法有一定的掌握,因为JSP底层是基于…

    Java 2023年5月23日
    00
  • 使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)

    使用IDEA搭建SSM框架的详细教程 简介 SSM框架是目前Java Web开发中最常用的框架之一,它由Spring、SpringMVC和MyBatis三个框架组成,可以很好地解决Java Web开发中的各种问题。本文将详细介绍如何使用IDEA搭建SSM框架,并提供两个示例说明。 环境准备 在开始之前,需要确保以下环境已经准备好: JDK 1.8以上版本 M…

    Java 2023年5月18日
    00
  • Java 7大常见排序方法实例详解

    Java 7大常见排序方法实例详解 排序算法是计算机科学中的重要技能之一,Java为开发者提供了多种常见的排序方法,本文将介绍Java 7大常见排序方法并提供详细的示例说明。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,它的思想是依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换这两个元素的位置,通过多次比较和交换,将…

    Java 2023年5月26日
    00
  • java如何更改数据库中的数据

    想要更改数据库中的数据,需要使用Java中的数据库操作技术,以下是详细的步骤: 1. 准备工作 首先需要确保Java项目中已经引入了数据库操作相关的依赖,例如JDBC。其次需要配置数据库连接信息,包括数据库驱动、数据库地址、用户名和密码等。 2. 连接数据库 使用Java代码连接数据库,可以使用JDBC提供的java.sql.Connection接口。例如:…

    Java 2023年5月19日
    00
  • java多线程之铁路售票系统

    Java多线程之铁路售票系统攻略 一、需求分析 铁路售票系统需要满足的主要需求: 售票窗口可以同时售卖多张票,需要支持并发访问。 售票系统需要保证售卖的票数不能超过存库量。 当售票系统资源被其他线程占用时,需要等待其他线程执行完毕后才能获取资源。 二、设计思路 根据需求,我们可以采用以下设计思路: 定义 Ticket 类表示火车票,其中包括车次、出发时间、座…

    Java 2023年5月19日
    00
  • 详解简单基于spring的redis配置(单机和集群模式)

    以下是完整的攻略: 详解简单基于Spring的Redis配置(单机和集群模式) 本文将为你讲解如何在Spring中配置Redis,包括单机和集群模式,帮助你快速上手。 1. 依赖引入 首先,需要在Maven或Gradle中添加Redis的依赖,下面是Maven的配置: <dependency> <groupId>org.springf…

    Java 2023年5月26日
    00
  • Idea开发工具之SpringBoot整合JSP的过程

    接下来我会详细讲解在Idea开发工具中如何整合SpringBoot和JSP。 准备工作 在开始之前,确保你已经完成以下准备工作: 安装了JDK和Idea开发工具。 创建一个SpringBoot项目。 确保pom.xml中已经添加了对于Spring Web和Tomcat的依赖。 整合JSP 第一步:在pom.xml中添加依赖 在pom.xml中添加以下依赖: …

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