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日

相关文章

  • Spring框架生成图片验证码实例

    让我来详细讲解一下“Spring框架生成图片验证码实例”的完整攻略。 1. 环境搭建 首先,我们需要搭建好Spring MVC环境,这里就不做过多的讲解了。如果你还不熟悉Spring MVC的环境搭建,可以先学习一下相关的教程,在此不再赘述。 2. 添加依赖 在我们项目的pom.xml文件中,我们需要添加以下依赖: <!– SpringSecurit…

    Java 2023年6月15日
    00
  • java递归菜单树转换成pojo对象

    下面我将详细讲解“Java递归菜单树转换成POJO对象”的完整攻略。 什么是递归菜单树? 递归菜单树是一种常见的数据结构,它可以用来表示树形结构的数据,例如网站的导航菜单、商品分类等。一个递归菜单树通常由多个节点组成,每个节点可以包含一个或多个子节点,因此它具有递归的特性。 在Java编程中,我们通常使用多个Java对象来表示一个递归菜单树,其中每个Java…

    Java 2023年5月26日
    00
  • Java中使用json与前台Ajax数据交互的方法

    请看下面的完整攻略: Java中使用json与前台Ajax数据交互的方法 在前后端分离的开发模式中,我们通常使用Ajax进行数据交互,而json作为一种轻量级的数据格式,具有传输速度快、数据量小、易于解析等优点,因此被广泛应用于前后端的数据交互。本文将介绍Java中使用json与前台Ajax数据交互的方法。 一、搭建环境 为了演示方便,我们将使用Spring…

    Java 2023年5月26日
    00
  • spring集成httpclient配置的详细过程

    下面是spring集成httpclient配置的详细过程。 1. 引入依赖 首先在pom.xml中引入httpclient和httpasyncclient的依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>http…

    Java 2023年5月31日
    00
  • Java对称与非对称加密算法原理详细讲解

    Java对称加密算法原理详细讲解 什么是对称加密算法? 对称加密算法是指加密和解密使用的密钥相同的一类加密算法。在数据传输过程中,发送方使用密钥对数据进行加密,接收方使用同样的密钥对数据进行解密,因此只有知道密钥的人才能够对数据进行解密。对称加密算法具有加密速度快、加密强度高的优点,但其缺陷在于密钥需要被发送方和接收方共享,如果密钥被攻击者获取,那么数据就存…

    Java 2023年5月26日
    00
  • spring jpa集成依赖的环境准备及实体类仓库编写教程

    下面就为您详细讲解“spring jpa集成依赖的环境准备及实体类仓库编写教程”。 准备环境 在集成 spring jpa 之前,需要先准备好以下环境: Maven Java JDK Spring Boot 添加依赖 在 pom.xml 文件中,添加以下依赖: <dependencies> <dependency> <group…

    Java 2023年5月20日
    00
  • jsp form表单方法示例

    下面是“jsp form表单方法示例”的完整攻略。 简介 在JSP中,表单是非常常见的页面元素,通常用于用户信息收集、搜索和数据提交等操作。本文将讲解如何在JSP页面中使用form表单。 表单基础知识 在JSP中,使用form表单需要以下基础知识: 表单是用来收集用户输入数据的一种HTML元素,通常使用 标签来表示。 表单可以使用GET或POST方式来提交数…

    Java 2023年6月15日
    00
  • Java安全之Tomcat6 Filter内存马问题

    Java安全之Tomcat6 Filter内存马问题完整攻略 背景 Tomcat是一个开放源代码的Web应用服务器,支持多种Web开发技术,包括Java Servlet、JavaServer Pages(JSP)和JavaServer Faces(JSF)等。然而,在使用Tomcat时,可能会存在一些安全问题,比如内存马问题。本篇攻略旨在详细介绍Tomcat…

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