【转】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注解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值