springboot使用hibernate validator校验方式

下面是关于“Spring Boot使用Hibernate Validator校验方式”的完整攻略,包括使用示例:

1. 什么是Hibernate Validator

Hibernate Validator是实现Java Bean Validation规范的一个开源的验证框架。它减少了一些重复的校验代码的编写,并提供了一个标准化的验证方式,可以在不同的Bean Validation API中使用。

2. Spring Boot中使用Hibernate Validator

2.1 添加依赖

Spring Boot默认已经集成了Hibernate Validator,只需要在pom.xml中添加如下依赖即可:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.2 添加校验注解

在Java Bean字段上添加Hibernate Validator的注解,来指定具体的校验规则。例如:

public class User {

    @NotBlank(message = "用户名不能为空")
    private String name;

    @Min(value = 18, message = "年龄必须大于等于18岁")
    private Integer age;
}

2.3 开启校验

可以在Spring Boot应用程序的入口处(通常是Application类)添加@Validated注解,来开启校验功能。例如:

@RestController
@Validated
public class UserController {

    @PostMapping("/user")
    public User createUser(@RequestBody @Valid User user) {
        return user;
    }
}

在上述例子中,@Validated注解标注了RestController,那么所有在该类中使用@Valid注解的地方都将进行校验。

2.4 自定义错误返回

在控制类中可以使用@ExceptionHandler注解来处理抛出的验证错误异常BindException,如下所示:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BindException.class)
    public Map<String, String> handlerBindException(BindException e) {
        Map<String, String> errorMap = new HashMap<>();
        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
        for (FieldError error : fieldErrors) {
            errorMap.put(error.getField(), error.getDefaultMessage());
        }
        return errorMap;
    }
}

2.5 示例1

代码如下:

@RestController
@Validated
public class UserController {

    @PostMapping("/user")
    public User createUser(@RequestBody @Valid User user) {
        return user;
    }

    @GetMapping("/user/{id}")
    public User findUserById(@PathVariable @Min(1) Integer id) {
        User user = new User();
        user.setId(id);
        user.setName("Tom");
        user.setAge(20);
        return user;
    }
}

在上述代码中,UserController中创建用户与查询用户的方法都对输入参数进行了校验。

2.6 示例2

使用自定义错误返回对上述示例进行改造:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BindException.class)
    public Map<String, String> handlerBindException(BindException e) {
        Map<String, String> errorMap = new HashMap<>();
        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
        for (FieldError error : fieldErrors) {
            errorMap.put(error.getField(), error.getDefaultMessage());
        }
        return errorMap;
    }
}

@RestController
@Validated
public class UserController {

    @PostMapping("/user")
    public User createUser(@RequestBody @Valid User user) {
        return user;
    }

    @GetMapping("/user/{id}")
    public User findUserById(@PathVariable @Min(1) Integer id) {
        User user = new User();
        user.setId(id);
        user.setName("Tom");
        user.setAge(20);
        return user;
    }
}

在上述改造中,当校验失败时,全局异常处理类将返回一个Map类型的错误信息。

至此,Spring Boot使用Hibernate Validator校验的完整攻略介绍完毕。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot使用hibernate validator校验方式 - Python技术站

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

相关文章

  • Spring Boot(四)之使用JWT和Spring Security保护REST API

    下面是关于Spring Boot如何使用JWT和Spring Security保护REST API的攻略: 什么是JWT? JSON Web Token(JWT)是一种开放标准(RFC 7519),用于通过网络在各方之间安全地传输声明。JSON Web Token是由三部分组成:标题,声明和签名。例如: eyJhbGciOiJIUzI1NiIsInR5cCI…

    Java 2023年5月20日
    00
  • 常见的Java加密算法有哪些?

    常见的Java加密算法有以下几种:对称加密算法、非对称加密算法和散列算法。 对称加密算法 对称加密算法是指发送方和接收方使用相同的密钥对数据进行加密和解密。常见的对称加密算法有DES、3DES、AES、Blowfish等。 以AES算法为例,以下为使用步骤: 1)生成密钥 SecretKey secretKey = KeyGenerator.getInsta…

    Java 2023年5月11日
    00
  • Java集合功能与用法实例详解

    Java集合功能与用法实例详解 Java集合是Java编程语言中的一种容器,可以存储和操作对象。Java集合提供了一组接口和类,用于快速创建各种不同类型的集合,如列表(List)、集(Set)、图(Map)等。在本文中,我们将详细探讨Java集合的功能和用法,并提供两个实例说明。 Java集合的分类 Java集合被分为以下三个主要类别: List:列表类集合…

    Java 2023年5月26日
    00
  • 详解java中的PropertyChangeSupport与PropertyChangeListener

    详解java中的PropertyChangeSupport与PropertyChangeListener 介绍 PropertyChangeSupport 是 Java 中的一个工具类,它实现了支持属性更改监听器的机制,用于帮助我们在程序设计中更方便的实现属性的监听和更改。 PropertyChangeSupport 基于事件模型,可以让我们方便地实现对象属…

    Java 2023年6月15日
    00
  • java基本教程之Thread中start()和run()的区别 java多线程教程

    Java基本教程之Thread中start()和run()的区别 在Java多线程编程中,我们经常需要创建一个线程对象并调用它的start()方法来启动新的线程,但是也有些开发者选择直接调用线程对象的run()方法来执行线程代码。那么,start()和run()方法有什么区别呢? 区别 start()方法会启动一个新的线程并在新的线程中执行相应的run()方…

    Java 2023年5月18日
    00
  • 详解SpringMVC的拦截器链实现及拦截器链配置

    详解SpringMVC的拦截器链实现及拦截器链配置 在SpringMVC中,拦截器是一个非常重要的组件,它可以帮助我们在请求到达控制器之前或之后执行一些操作。本文将详细介绍SpringMVC的拦截器链实现及拦截器链配置,并提供两个示例说明。 拦截器链实现 在SpringMVC中,拦截器链是由HandlerInterceptor接口实现的。拦截器链中的每个拦截…

    Java 2023年5月17日
    00
  • JSP教程之使用JavaBean完成业务逻辑的方法

    接下来我将详细讲解 “JSP教程之使用JavaBean完成业务逻辑的方法” 的完整攻略。 什么是JavaBean JavaBean 是指一种特殊的 Java 类,这种类具有以下特征: 具有无参的构造器 所有成员变量都是私有的 提供了公共的 setter 和 getter 方法 可序列化 JavaBean 的主要作用是封装数据,提供操作数据的方法。 使用Jav…

    Java 2023年6月15日
    00
  • Intellij IDEA 2017新特性之Spring Boot相关特征介绍

    IntelliJ IDEA 2017是一款功能强大的Java集成开发环境,提供了许多有用的功能和工具,特别是在Spring Boot开发方面。以下是IntelliJ IDEA 2017中Spring Boot相关特性的介绍: 1. Spring Boot Initializr IntelliJ IDEA 2017提供了Spring Boot Initiali…

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