目录
五、知识点整理
:
一、
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 | 判断数值最大值 |
判断邮箱是否合法 |
测试:
@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
”属性