【转】java 开发之 SpringBoot 数据校验机制
日常项目开发中,对于前端提交的表单,java培训后台接口接收到表单数据后,为了程序的严谨性,通常后端会加入业务参数的合法校验操作来避免程序的非技术性 bug,这里对于客户端提交的数据校验,SpringBoot 通过 spring-boot-starter-validation 模块包含了数据校验的工作。
表单校验的框架
JSR303/JSR-349::提供 bean 属性相关校验规则
JSR303/JSR-349: JSR303 是一项标准,只提供规范不提供实现,规定一些校验规范即校验注解,如 @Null,@NotNull,@Pattern,位于 javax.validation.constraints 包下。JSR-349 是其升级版本, 添加了一些新特性。
第一步:环境配置
实现参数校验,程序必须引入 spring-boot-starter-validation 依赖,只是在引入 spring-boot- starter-web 依赖时,该模块会自动依赖 spring-boot-starter-validation,所以程序中引入 spring-boot- starter-web 会一并依赖 spring-boot-starter-validation 到项目中。
第二步:在需要校验的实体类的属性上添加校验的规则
public class User {
private Integer uid;
@NotBlank(message = "用户名不能为空")
private String uname;
@NotBlank(message = "用户密码不能为空!")
@Length(min = 6, max = 10,message = "密码长度至少 6 位但不超过 10 位!")
private String upasswd;
省略了 get/set 方法...
}
第三步:在 controller 层中需要校验的方法参数旁加上 @Valid 注解
第四步:自定义异常处理参数校验不合格信息
public class ParamsException extends RuntimeException {
private Integer code=300;
private String msg="参数异常!";
public ParamsException() {
super("参数异常!");
}
public ParamsException(String msg) {
super(msg);
this.msg = msg;
}
public ParamsException(Integer code) {
super("参数异常!");
this.code = code;
}
public ParamsException(Integer code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
省略了 get/set 方法
}
第五步,通过全局异常处理获取参数校验不满足的信息
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public String excetionHandlerTest(Exception e ) {
ParamsException exception=(ParamsException) e;
return exception.getMsg();
}
}
第六步,测试项目(通过 postman 测试)
参数校验都满足的情况:
参数校验不满足的情况:
出现以上情况,就证明我们的数据校验是可以的了。
转载于 java 学习
评论