Spring Boot中如何使用优雅的参数校验方式呢?
下文笔者讲述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()); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。