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

本文介绍了如何在SpringBoot项目中利用@NotEmpty,@NotBlank,@NotNull注解进行参数校验,以及如何通过全局异常处理器统一处理验证失败。通过这些注解,提高代码健壮性和安全性,提升开发效率。
摘要由CSDN通过智能技术生成
  • 在 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 类用于接收用户注册的请求参数。通过在 usernamepassword 字段上添加 @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 中使用参数校验注解可以方便地对用户传入的参数进行校验,保证数据的有效性和安全性。同时,通过定义全局异常处理器,可以统一处理所有的参数校验异常,提高了代码的健壮性和可维护性。

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值