目录
一、SpringBoot参数校验
二、SpringBoot参数校验_异常处理
三、SpringBoot参数校验_校验相关注解
四、SpringBoot参数校验_对象类型
五、知识点整理:
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 异常。
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
当抛出 ConstraintViolationException 异常后,我们可以使用SpringMVC的异常处理器,也可以使用SpringBoot自带的异常处理机制。
当程序出现了异常,SpringBoot会使用自带的 BasicErrorController 对象处理异常。该处理器会默认跳转到/resources/templates/error.html页面。
注意:(约定大于配置)html页面的名字必须命名为error,因为springboot内部定义了返回的是error.html。
1.引入 Thymeleaf 起步依赖
org.springframework.boot
spring-boot-starter-thymeleaf
2.编写异常页面error.html:
错误页面
服务器开小差了!
3.访问localhost:8080/t1,由于没有给username传入参数,所以自动跳转到error.html页面
有用的冷知识:
1.不论什么异常,springboot都会跳转到error.html异常页面的
2.我们访问浏览器时遇到“服务器开小差了”等,看着只是个简单的页面,可能程序已经出大问题了。
注解 |
作用 |
@NotNull | 判断包装类是否为null |
@NotBlank | 判断字符串是否为null或者为空串(去掉首尾空格) |
@NotEmpty | 判断集合是否为空 |
@Length | 判断字符的长度(最大或最小) |
@Min | 判断数值最小值 |
@Max | 判断数值最大值 |
判断邮箱是否合法 |
测试:
@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参数)
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 ”属性