Spring Boot中Controller如何验证参数呢?
下文笔者讲述一种SpringBoot验证参数的最佳方法,如下所示
采用此种方式验证参数,优雅美观好看,统一规整,美,希望大家多使用此种方式验证参数
例:SpringBoot中优雅验证Controller中参数的示例分享,如下所示
采用此种方式验证参数,优雅美观好看,统一规整,美,希望大家多使用此种方式验证参数
在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()); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。