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());
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


