10SpringBoot参数校验

目录

一、SpringBoot参数校验

二、SpringBoot参数校验_异常处理

三、SpringBoot参数校验_校验相关注解

四、SpringBoot参数校验_对象类型

五、知识点整理:

一、SpringBoot参数校验

10SpringBoot参数校验_第1张图片

 SpringBoot自带了validation工具可以从后端对前端传来的参数进行校验,用法如下:

1.引入 validation 起步依赖


      org.springframework.boot
      spring-boot-starter-validation

2.Controller 层编写TestController控制器类(添加@Validated、@NotBlank注解)

//@Validated:该控制器开启参数校验
@Validated
@Controller
public class TestController {

    @RequestMapping("/t1")
    @ResponseBody
    //在参数前加校验主键@NotBlank,意思是不允许参数为null
    public String t1(@NotBlank String username){
        System.out.println(username);
        return "请求成功!";
    }
}

3.访问http://localhost:8080/t1,发现当没有传来参数时,会抛出 ConstraintViolationException 异常。

10SpringBoot参数校验_第2张图片

10SpringBoot参数校验_第3张图片

 4.在校验参数的注解中添加 message 属性,可以替换异常信息。

//@Validated:该控制器开启参数校验
@Validated
@Controller
public class TestController {

    @RequestMapping("/t1")
    @ResponseBody
    //在参数前加校验主键@NotBlank,意思是不允许参数为null
    public String t1(@NotBlank(message = "用户名不能为空") String username){
        System.out.println(username);
        return "请求成功!";
    }
}

10SpringBoot参数校验_第4张图片

5.正确访问方式:localhost:8080/t1?username=nihao

 

二、SpringBoot参数校验_异常处理

10SpringBoot参数校验_第5张图片

 当抛出 ConstraintViolationException 异常后,我们可以使用SpringMVC的异常处理器,也可以使用SpringBoot自带的异常处理机制。

当程序出现了异常,SpringBoot会使用自带的 BasicErrorController 对象处理异常。该处理器会默认跳转到/resources/templates/error.html页面。

注意:(约定大于配置)html页面的名字必须命名为error,因为springboot内部定义了返回的是error.html。

10SpringBoot参数校验_第6张图片

1.引入 Thymeleaf 起步依赖


     org.springframework.boot
     spring-boot-starter-thymeleaf

2.编写异常页面error.html:




    
    错误页面


服务器开小差了!

3.访问localhost:8080/t1,由于没有给username传入参数,所以自动跳转到error.html页面

10SpringBoot参数校验_第7张图片

有用的冷知识:

1.不论什么异常,springboot都会跳转到error.html异常页面的

2.我们访问浏览器时遇到“服务器开小差了”等,看着只是个简单的页面,可能程序已经出大问题了。

三、SpringBoot参数校验_校验相关注解

注解

作用
@NotNull 判断包装类是否为null
@NotBlank

判断字符串是否为null或者为空串(去掉首尾空格)

@NotEmpty 判断集合是否为空
@Length 判断字符的长度(最大或最小)
@Min 判断数值最小值
@Max 判断数值最大值
@Email 判断邮箱是否合法

测试:

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

注意:集合类型的参数前面一定要加@RequestParam注解

结果显示:

正确路径:

 错误路径:(没有传递email参数)

10SpringBoot参数校验_第8张图片

 

四、SpringBoot参数校验_对象类型

10SpringBoot参数校验_第9张图片

 SpringBoot也可以校验对象参数中的每个属性,用法如下:

1.添加实体类Student

public class Student {
    @NotNull(message = "id不能为空")
    private Integer id;
    @NotBlank(message = "姓名不能为空")
    private String name;
    // 省略getter/setter/tostring
}

2.编写控制器

@RequestMapping("/t3")
    @ResponseBody
    // 校验的对象参数前添加@Validated,并将异常信息封装到BindingResult对象中
    public String t3(@Validated Student student, BindingResult result){
        // 判断是否有参数异常
        if(result.hasErrors()){
            // 所有参数异常
            List list = result.getAllErrors();
            // 遍历所有异常,输出异常信息
            for (ObjectError err : list) {
                FieldError fieldError = (FieldError) err;
                System.out.println(fieldError.getDefaultMessage());
            }
            throw new RuntimeException("参数异常");
        }
        System.out.println(student);
        return "请求成功!";
    }

五、知识点整理:

1.SpringBoot校验简单数据类型参数,需要在类上方添加的注解是“@Validated

2.当SpringBoot项目抛出异常后,默认会跳转的页面是“/resources/templates/error.html

3.SpringBoot校验对象类型参数,不需要在类上方添加“@Validated ”注解

4.SpringBoot参数校验时想要自定义异常信息,需要在校验注解中添加“message ”属性

你可能感兴趣的:(SpringBoot,java,spring,boot,spring)