SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解进行参数校验

 更新时间:2024年08月18日 14:42:51   作者:CodeDunkster  
我们经常需要对请求参数进行校验,本文主要介绍了SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解进行参数校验,具有一定的参考价值,感兴趣的可以了解一下

在 Spring Boot 项目中,我们经常需要对请求参数进行校验,以确保其符合预期的格式和内容。Spring 提供了一些注解来简化参数校验的工作,其中包括 @NotEmpty@NotBlank 和 @NotNull。在本文中,我们将学习如何使用这些注解来进行参数校验,并解释为什么要使用它们。

1. 导入依赖

首先,在 pom.xml 文件中添加以下 Maven 依赖:

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

这将导入 Spring Boot 提供的参数校验功能所需的依赖。

2. 使用 @NotEmpty、@NotBlank、@NotNull

  • @NotEmpty:用于检查集合或数组等对象是否为 null 或空。该注解通常用于检查字符串是否为空,集合是否为空等情况。
  • @NotBlank:用于检查字符串是否不为空,并且去除首尾空格后长度大于 0。该注解通常用于检查用户输入的字符串是否为有效值。
  • @NotNull:用于检查对象(包装类:Integer、Boolean等)是否不为 null。该注解通常用于检查对象是否已经被初始化。

3. 增加 @Validated 注解

为了让参数校验注解生效,我们需要在 Controller 或 Service 类上添加 @Validated 注解。

4. 示例

假设我们有一个简单的 Controller 处理器,用于接收用户的注册请求,并需要对用户名和密码进行校验:

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Validated
public class UserController {

    @PostMapping("/register")
    public String registerUser(@Valid @RequestBody UserDTO userDTO) {
        // 处理用户注册逻辑
        return "User registered successfully!";
    }

    public static class UserDTO {
        @NotBlank(message = "用户名不能为空")
        private String username;

        @NotBlank(message = "密码不能为空")
        private String password;

        // 省略 getter 和 setter 方法
    }
}

在上面的示例中,我们定义了一个 UserDTO 类用于接收用户注册的请求参数。通过在 username 和 password 字段上添加 @NotBlank 注解,我们要求这两个字段不能为空,并且不允许只包含空格。同时,在 UserController 类上添加了 @Validated 注解,以确保参数校验生效。

5. 为什么使用 @NotEmpty、@NotBlank、@NotNull

  • 提高代码健壮性:通过对参数进行校验,可以有效地防止空指针异常或无效输入带来的问题,提高系统的稳定性和安全性。
  • 提升开发效率:使用这些注解可以减少手动编写参数校验逻辑的工作量,提高开发效率,同时使代码更加清晰易读。
  • 统一规范:采用注解方式进行参数校验可以使代码规范化,降低维护成本,并且有利于团队间的协作与交流。

6.全局异常处理器

在 Spring Boot 中,如果参数校验失败,将会抛出 MethodArgumentNotValidException 异常或 ConstraintViolationException 异常。为了统一处理这些异常,可以定义一个全局异常处理器。

下面是一个简单的全局异常处理器示例:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.MethodArgumentNotValidException;

@ControllerAdvice
public class GlobalExceptionHandler {

	@ExceptionHandler(MethodArgumentNotValidException.class)
	public ResponseEntity<String> handleValidationExceptions(MethodArgumentNotValidException ex) {
    return new ResponseEntity<>("Invalid request: " + ex.getMessage(), HttpStatus.BAD_REQUEST);
  }

// 可以添加其他异常处理方法
}

在上面的示例中,handleValidationExceptions 方法用于处理参数校验异常 MethodArgumentNotValidException,并返回一个包含错误信息的 ResponseEntity 对象。

通过定义全局异常处理器,可以集中处理所有控制器中抛出的参数校验异常,并向客户端返回统一的错误信息,提高了代码的可维护性和可重用性。

总结

在 Spring Boot 中使用参数校验注解可以方便地对用户传入的参数进行校验,保证数据的有效性和安全性。同时,通过定义全局异常处理器,可以统一处理所有的参数校验异常,提高了代码的健壮性和可维护性。

到此这篇关于SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解进行参数校验的文章就介绍到这了,更多相关SpringBoot注解参数校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Resty开发restful版本的Jfinal深入研究

    Resty开发restful版本的Jfinal深入研究

    这篇文章主要为大家介绍了Resty开发restful版本的Jfinal深入研究有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • java自定义ClassLoader加载指定的class文件操作

    java自定义ClassLoader加载指定的class文件操作

    这篇文章主要介绍了java自定义ClassLoader加载指定的class文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java中的NoClassDefFoundError报错含义解析

    Java中的NoClassDefFoundError报错含义解析

    这篇文章主要为大家介绍了Java中的NoClassDefFoundError含义详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-11-11
  • 2020年IntelliJ IDEA最新最详细配置图文教程详解

    2020年IntelliJ IDEA最新最详细配置图文教程详解

    这篇文章主要介绍了2020年IntelliJ IDEA最新最详细配置图文教程详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java类加载器ClassLoader用法解析

    Java类加载器ClassLoader用法解析

    这篇文章主要介绍了Java类加载器ClassLoader用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java中static变量作用和用法详解

    Java中static变量作用和用法详解

    Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问.下面我们来详细了解一下吧
    2019-06-06
  • Spring Boot中@Validated注解不生效问题汇总大全

    Spring Boot中@Validated注解不生效问题汇总大全

    这篇文章主要给大家介绍了关于Spring Boot中@Validated注解不生效问题汇总的相关资料,@Validated注解是Spring框架中的一个注解,用于在方法参数上添加参数校验规则,需要的朋友可以参考下
    2023-07-07
  • mybatis plus CU自动填充 和 软删除自动填充的实现方法

    mybatis plus CU自动填充 和 软删除自动填充的实现方法

    这篇文章主要介绍了mybatis plus CU自动填充 和 软删除自动填充的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • java实现菜单滑动效果

    java实现菜单滑动效果

    这篇文章主要介绍了java实现菜单滑动效果,效果非常棒,这里推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • java常见报错及解决方案总结

    java常见报错及解决方案总结

    这篇文章主要介绍了Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常、死锁和类未找到异常,文中通过代码将解决方案介绍的非常详细,需要的朋友可以参考下
    2025-03-03

最新评论