日常项目开发中,对于前端提交的表单,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注解

@PutMapping("user")
public String addUser(@RequestBody @Valid User user, BindingResult resul){
//如果传过来的参数与设置的规则不一致的话,则抛出异常(我这里是自定义异常)
    if (resul.hasErrors()){
        throw new ParamsException(400,resul.getFieldError().getDefaultMessage());
    }
    int save = userService.save(user);
    if (save>0){
        return "添加成功";
    }else {
        return "添加失败";
    }


}

第四步:自定义异常处理参数校验不合格信息

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学习


IT小尚
24 声望8 粉丝

尚硅谷IT培训学习爱好分享者