Springboot——参数校验

springboot参数校验注解

在controller层需要对前端传来的参数进行校验

校验简单数据类型

使用springboot自带的validation工具可以从后端对前端传来的数据进行校验

使用方法:

  1. 创建项目时引入I/O场景下的validation起步依赖
  2. 使用maven创建项目时,引入起步依赖:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
  1. 添加注解@Validated控制器开启参数校验功能
  2. 在参数前添加校验标准的注解,判断参数
注解 作用
@NotNull 判断包装类是否为null
@NotBlank 判断字符串是否为null或者是空串(去掉首位空格)
@NotEmpety 判断集合是否为空
@Length 判断字符的长度(最大或最小)
@Min 判断数值最小值
@Max 判断数值最大值
@Email 判断邮箱是否合法

例如:

    @RequestMapping("/t2")
    @ResponseBody
    public String t2(@NotBlank @Length(min = 1,max = 5) String username,
                     @NotNull @Min(0) @Max(50) Integer age,
                     @NotEmpty @RequestParam List<String> address,
                     @NotBlank @Email String email){
        System.out.println(username);
        System.out.println(age);
        System.out.println(address);
        System.out.println(email);
        return "请求成功";
    }

异常处理

当抛出ConstraintViolationException异常时,可以使用SpringMVC的异常处理器处理异常,也可以使用springboot的异常处理器。

springboot使用BasicErrorController来进行异常处理,当出现异常时,会跳转到resources/templates/error.html,只需要对error.html进行编辑就可以处理,当然后台还是会报异常的,如果需要详细的处理异常,那么就需要采用SpringMVC的异常处理器来处理了

校验对象类型参数

校验对象类型参数,实际是判断传来对象的属性

使用方法:

  1. 在对象属性前添加校验标准
  2. 在对象参数前添加注解@Validated,并将异常信息封装到BindingResult对象中

例如:

public class User {

    @NotBlank(message = "用户名不能为空")
    private String username;
    @NotNull(message = "id不能为空")
    private int id;

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", id=" + id +
                '}';
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
    @RequestMapping("/t3")
    @ResponseBody
    public String t3(@Validated User user, BindingResult result){

        //判断是否有异常
        if (result.hasErrors()){
            List<ObjectError> list = result.getAllErrors();
            for (ObjectError err:list
                 ) {
                FieldError fieldError = (FieldError) err;
                System.out.println(fieldError.getDefaultMessage());
            }

            throw new RuntimeException("参数验证");
        }

        System.out.println(user);
        return "请求成功";
    }

注意:对对象参数进行校验时不需要给controller添加@Validated注解,只需要给对象参数添加注解就可以,校验标准应该添加在对象的属性中

posted @ 2023-05-27 17:07  yuxin!!  阅读(248)  评论(0编辑  收藏  举报