Spring Boot中如何使用优雅的参数校验方式呢?

麦迪 SpringBoot 发布时间:2023-12-15 22:30:56 阅读数:14842 1
下文笔者讲述SpringBoot中优雅的进行参数验证的方法分享,如下所示
 通常我们判断一个参数是否符合要求时
         我们会采用if else的判断方式
  那么如果参数很多时,会导致代码臃肿
   此时我们必须一种优雅的方式处理参数验证
          那么如何如何实现呢?下文笔者将一一道来,如下所示   
java中参数验证,我们可以采用注解的方式对参数验证
   @NotNull:值不能为null;
@NotEmpty:字符串、集合或数组的值不能为空,即长度大于0;
@NotBlank:字符串的值不能为空白,即不能只包含空格;
@Size:字符串、集合或数组的大小是否在指定范围内;
@Min:数值的最小值;
@Max:数值的最大值;
@DecimalMin:数值的最小值,可以包含小数;
@DecimalMax:数值的最大值,可以包含小数;
@Digits:数值是否符合指定的整数和小数位数;
@Pattern:字符串是否匹配指定的正则表达式;
@Email:字符串是否为有效的电子邮件地址;
@AssertTrue:布尔值是否为true;
@AssertFalse:布尔值是否为false;
@Future:日期是否为将来的日期;
@Past:日期是否为过去的日期;
例:SpringBoot中优雅的对参数进行验证
使用IDEA创建一个spring boot项目。在项目的pom.xml文件中添加如下依赖:

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-validation</artifactId>
 </dependency>
3.2 创建示例实体类
创建一个User实体类,在实体类中需要对属性进行如下验证:

name - 用户姓名,不能为空;
password - 密码,不能为空,长度不能小于6;
age - 年龄,大于0小于150;
phone - 手机号,满足手机号格式;
User实体类具体代码如下:

 import lombok.Data;
 import javax.validation.constraints.*;
 ​
 @Data
 public class User {
 ​
   @NotBlank(message = "用户姓名不能为空")
   private String name;
 ​
   @NotBlank(message = "密码不能为空")
   @Size(min = 6, message = "密码长度不能少于6位")
   private String password;
 ​
   @Min(value = 0, message = "年龄不能小于0岁")
   @Max(value = 150, message = "年龄不应超过150岁")
   private Integer age;
 ​
   @Pattern(regexp = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\d{8}$", message = "手机号格式不正确")
   private String phone;
 ​
 }
 ​
3.3 创建控制器类
创建一个简单的控制器类,用于演示参数验证功能。

控制器代码如下:

 import cn.ddcherry.springboot.demo.util.R;
 import cn.ddcherry.springboot.demo.entity.User;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 ​
 import javax.validation.Valid;
 ​
 @RestController
 @RequestMapping("/user")
 public class UserController {
 ​
   @PostMapping("/save")
   public R save(@Valid @RequestBody User user) {
     return R.ok(user);
   }
 }
我们在参数user前添加@Valid注解,表示验证该参数。

其中R是封装的一个简易工具类,用于统一返回结果格式。代码如下:

 import lombok.Data;
 ​
 import java.io.Serializable;
 ​
 @Data
 public class R<T> implements Serializable {
   private int code;
   private boolean success;
   private T data;
   private String msg;
 ​
   private R(int code, T data, String msg) {
     this.code = code;
     this.data = data;
     this.msg = msg;
     this.success = code == 200;
   }
 ​
   public static <T> R<T> ok(T data) {
     return new R<>(200, data, null);
   }
 ​
   public static <T> R<T> error(String msg) {
     return new R<>(500, null, msg);
   }
 }
3.4 定义全局异常处理类
全局异常处理类代码如下:

 import cn.ddcherry.springboot.demo.util.R;
 import org.springframework.validation.BindException;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 ​
 @RestControllerAdvice
 public class GlobalExceptionHandler {
 ​
   @ExceptionHandler(BindException.class)
   public R handleError(BindException e) {
     BindingResult bindingResult = e.getBindingResult();
     return R.error(bindingResult.getFieldError().getDefaultMessage());
   }
 }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202312/7474.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者