现在的项目在前后端分离的情况下,不仅要做前端数据校验,同时后端也需要实现。
常用的注解:
Valid | 递归的对关联的对象进行校验 |
AssertFalse | 用于boolean字段,该字段的值只能为false |
AssertTrue | 用于boolean字段,该字段只能为true |
DecimalMax(value) | 被注释的元素必须是一个数字,只能大于或等于该值 |
DecimalMin(value) | 被注释的元素必须是一个数字,只能小于或等于该值 |
Digits(integer,fraction) | 检查是否是一种数字的(整数,小数)的位数 |
Future | 检查该字段的日期是否是属于将来的日期 |
FutureOrPresent | 判断日期是否是将来或现在日期 |
Past | 检查该字段的日期是在过去 |
PastOrPresent | 判断日期是否是过去或现在日期 |
Max(value) | 该字段的值只能小于或等于该值 |
Min(value) | 该字段的值只能大于或等于该值 |
Negative | 判断负数 |
NegativeOrZero | 判断负数或0 |
Positive | 判断正数 |
PositiveOrZero | 判断正数或0 |
NotNull | 不能为null |
Null | 必须为 null |
Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
Size(max, min) | 检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等 |
Length(max, min) | 判断字符串长度 |
CreditCardNumber | 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性 |
| 被注释的元素必须是电子邮箱地址 |
Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
NotBlank | 只能用于字符串不为null,并且字符串trim()以后length要大于0 |
NotEmpty | 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null |
Range(min=, max=) | 被注释的元素必须在合适的范围内 |
SafeHtml | classpath中要有jsoup包 |
ScriptAssert | 要有Java Scripting API 即JSR 223("Scripting for the JavaTMPlatform")的实现 |
URL(protocol=,host=,port=,regexp=,flags=) | 被注释的字符串必须是一个有效的url |
依赖支持:
<!--服务器数据校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
操作:
校验使用的注解方法数据称存储对象属性上
public class StudentBean {
private int stuID;
//message:在当属性有页面传递过来时为空则输出message的内容
@NotBlank(message = "学生姓名不能为空")
private String stuName;
@Max(value = 18, message = "老大不小的人读啥子书哦")
@Min(value = 10, message = "小批娃儿读啥子书哦")
private Integer stuAge;
@Email(message = "邮箱格式为XXXXX@XX")
private String stuEmail;
@Pattern(regexp = "^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$",
message = "电话格式不正确")
private String stuTel;
}
在控制器中需要对需要校验的对象参数进行注解
@RequestMapping("/add")
@ResponseBody //需要校验的对象
public String addStu(@Valid StudentBean studentBean,
BindingResult result) throws JsonProcessingException {
System.out.println(studentBean);
if (result.hasErrors()) {//判断result中是否有错误信息
//如果有,取出错误信息转换为String的数据
return new ObjectMapper().
writeValueAsString(result.getFieldErrors());
}
return "ok";
}