SpringBoot 数据校验 - Validation

SpringBoot 数据校验 - Validation

       ⽇常项⽬开发中,对于前端提交的表单,后台接⼝接收到表单数据后,为了程序的严谨性,通常后端会加⼊业务参数的合法校验操作来避免程序的⾮技术性 bug,这⾥对于客户端提交的数据校验,SpringBoot 通过 spring-boot-starter-validation 模块包含了数据校验的⼯作。
       这⾥主要介绍 Spring Boot 中对请求数据进⾏校验,相关概念如下
       JSR303 :JSR303 是⼀项标准,只提供规范不提供实现,规定⼀些校验规即校验注解,如
       @Null,@NotNull,@Pattern,位于javax.validation.constraints 包下。JSR-349 是其升级版本,添加了⼀些新特性。
       Hibernate Validation :Hibernate Validation 是对这个规范的实现,并增加了⼀些其他校验注解,如@Email,@Length,@Range 等等。
       Spring Validation :Spring Validation 对 Hibernate Validation 进⾏了⼆次封装,在Spring MVC 模块中添加了⾃动校验,并将校验信息封装进了特定的类中。

1、环境配置

       实现参数校验,程序必须引⼊ spring-boot-starter-validation 依赖,只是在引⼊ spring-boot-starter-web 依赖时,该模块会⾃动依赖 spring-boot-starter-validation,所以程序中引⼊ spring-boot-starter-web 会⼀并依赖spring-boot-starter-validation 到项⽬中。

SpringBoot 数据校验 - Validation_第1张图片

2、校验相关注解

注解 功能
@AssertFalse 可以为null,如果不为null的话必须为false
@AssertTrue 可以为null,如果不为null的话必须为true
@DecimalMax 设置不能超过最⼤值
@DecimalMin 设置不能超过最⼩值
@Digits 设置必须是数字且数字整数的位数和⼩数的位数必须在指定范围内
@Future ⽇期必须在当前⽇期的未来
@Past ⽇期必须在当前⽇期的过去
@Max 最⼤不得超过此最⼤值
@Min 最⼤不得⼩于此最⼩值
@NotNull 不能为null,可以是空
@Min 最⼤不得⼩于此最⼩值
@Pattern 必须满⾜指定的正则表达式
@Size 集合、数组、map等的size()值必须在指定范围内
@Email 必须是email格式
@Length ⻓度必须在指定范围内
@NotBlank 字符串不能为null,字符串trim()后也不能等于“”
@NotEmpty 不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”
@Range 值必须在指定范围内
@URL 必须是⼀个URL

3、校验注解使⽤

  • User 实体类参数校验注解
public class User implements Serializable {
 
	 private Integer id;
	 
	 @NotBlank(message = "⽤户名不能为空!")
	 private String userName;
	 @NotBlank(message = "⽤户密码不能为空!")
	 @Length(min = 6, max = 10,message = "密码⻓度⾄少6位但不超过10位!")
	 private String userPwd;
	 
	 @Email
	 private String email;
	 
	 /*
	 省略get set ⽅法 
	 */
}
  • 接⼝⽅法形参 @Valid 注解添加
@PostMapping("user")
@ApiOperation(value = "⽤户添加")
@ApiImplicitParam(name = "user",value = "⽤户实体类",dataType = "User")
public ResultInfo saveUser02(@Valid User user){
	 ResultInfo resultInfo = new ResultInfo();
 // userService.saveUser(user);
 	return resultInfo; 
}
  • 全局异常错误信息捕捉
/**
* 全局异常处理 返回json
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultInfo exceptionHandler(Exception e){
	 ResultInfo resultInfo = new ResultInfo();
	 resultInfo.setCode(300);
	 resultInfo.setMsg("操作失败!");
	 if(e instanceof ParamsException){
		 ParamsException pe = (ParamsException) e;
		 resultInfo.setMsg(pe.getMsg());
		 resultInfo.setCode(pe.getCode());
	 } else if(e instanceof BindException){
	 	BindException be = (BindException) e;
		resultInfo.setResult(be.getBindingResult().getFieldError().getDefaultMessage());
 	}
  	return resultInfo; 
}
  • PostMan 接⼝测试

SpringBoot 数据校验 - Validation_第2张图片
SpringBoot 数据校验 - Validation_第3张图片

你可能感兴趣的:(笔记,spring,boot)