10SpringBoot参数校验

目录

一、SpringBoot参数校验

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

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

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

五、知识点整理

一、SpringBoot参数校验

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

1.引入 validation 起步依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

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 异常。

 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 "请求成功!";
    }
}

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

 

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

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

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

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

1.引入 Thymeleaf 起步依赖

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>错误页面</title>
</head>
<body>
<h1>服务器开小差了!</h1>
</body>
</html>

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

有用的冷知识:

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<String> address,
                     @NotBlank @Email String email) {
        System.out.println(username);
        System.out.println(age);
        System.out.println(address);
        System.out.println(email);
        return "请求成功!";
    }

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

结果显示:

正确路径:

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

 

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

 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<ObjectError> 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 ”属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值