目录
SpringBoot自带的validation工具可以对从后端对前端传来的数据进行校验
引入依赖
<!-- validation参数校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>3.0.1</version>
</dependency>
编写控制器
//该注解开启validation校验
@Validated
@Controller
@RequestMapping("/user")
public class MyController1 {
@RequestMapping("/t1")
@ResponseBody
//@NotBlank判断字符串是否是空值
public String t1(@NotBlank String name){
System.out.println(name);
return name;
}
}
这里我传入的name为空值,报错如下:(抛出的异常是ConstraintViolationException)
在注解中添加message属性可以替换异常信息
public String t1(@NotBlank(message = "name不能是空值") String name){ System.out.println(name); return name; }
异常处理
当抛出ConstraintViolationException异常后,我们可以使用SpringMvc自带的异常处理器也可以使用SpringBoot自带的异常处理器。
当程序出现异常后,SpringBoot会使用自带的BaseicErrorController对象处理异常跳转到/resources/template/error.html(这个页面自己创建编写 )
校验相关注解
注解 | 作用 |
---|---|
@NotNull | 判断包装类是否为空 |
@NotBlank | 判断字符串是否为null或者是空串(去掉首尾空格) |
@NotEmpty | 判断集合是否为空 |
@Length | 判断字符的长度(最大或者最小) |
@Min | 判断数值的最小值 |
@Max | 判断数值的最大值 |
判断邮箱是否合法 |
//测试七个校验注解
@ResponseBody
@RequestMapping("/t2")
public String t2(@NotNull
@Min(10)
@Max(100)
Integer a){
System.out.println(a);
return "ok t2";
}
@ResponseBody
@RequestMapping("/t3")
public String t3( @NotEmpty
List<Integer> list){
list.forEach(System.out::println);
return "ok t3";
}
@RequestMapping("/t4")
@ResponseBody
public String t4( @NotBlank
@Length(min = 3,max = 5)
String s){
System.out.println("s="+s);
return s;
}
@RequestMapping("/t5")
@ResponseBody
public String t5( @Email String email){
System.out.println("email="+email);
return email;
}
参数校验——对象类型
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Studnet {
@Min(10)
@Max(20)
@NotNull
private Integer id;
@Length(min = 2,max = 10)
@NotBlank
private String name;
}
记得要在对象类型前加@Validated注解
@RequestMapping("/t6") @ResponseBody public String t6(@Validated Studnet studnet, BindingResult result){ if(result.hasErrors()){ List<ObjectError> list=result.getAllErrors(); for(Object e:list){ System.out.println(e); } return "参数异常,不对"; } System.out.println(studnet); return "参数正确"; }