Spring Boot中Controller如何验证参数呢?

陈欣 SpringBoot 发布时间:2023-12-05 21:25:44 阅读数:7119 1
下文笔者讲述一种SpringBoot验证参数的最佳方法,如下所示
采用此种方式验证参数,优雅美观好看,统一规整,美,希望大家多使用此种方式验证参数
在Controller中接收参数
    验证是我们日常必不可少的操作方式
   当参数很少时,只有一个,两个,三个时,此时我们可以通过
   if判断的方式,对参数进行验证,当参数可多时,此时我们该怎么办呢?
   下文笔者将一一道来,如下所示
1.我们只需定义一个实体类接收参数
2.在实体类上加上相应的注解
  2.2 对一些特殊的类,我们还可以自定义一个参数验证类,如下所示

常见的验证注解

 
@NotNull:值不能为null
@NotEmpty:字符串、集合或数组的值不能为空,即长度大于0
@NotBlank:字符串的值不能为空白,即不能只包含空格
@Size:字符串、集合或数组的大小是否在指定范围内
@Min:数值的最小值
@Max:数值的最大值
@DecimalMin:数值的最小值,可以包含小数
@DecimalMax:数值的最大值,可以包含小数
@Digits:数值是否符合指定的整数和小数位数
@Pattern:字符串是否匹配指定的正则表达式
@Email:字符串是否为有效的电子邮件地址
@AssertTrue:布尔值是否为true
@AssertFalse:布尔值是否为false
@Future:日期是否为将来的日期
@Past:日期是否为过去的日期

例:SpringBoot中优雅验证Controller中参数的示例分享,如下所示

1.pom中引入相应的依赖

 <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>

定义实体类

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;
 ​
 }
 ​

创建控制器类

 import com.java265.springboot.demo.util.R;
 import com.java265.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注解
    验证该参数

封装数据返回类T

 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);
   }
 }

定义全局异常处理类

 import com.java265.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/7387.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

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

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者