提示:为了提高运行效率,一般都会在前端进行数据验证。但是后端验证是为了防止用户手动注入非法数据。
- 导入相关jar包,如图:
- 在实体类中对需要的数据进行验证,常见的有:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内 - 上述注解使用方式:
@Size(min = 11, max = 11, message = "手机号码长度不正确")
@Pattern(regexp = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$", message = "手机号格式错误")
private String telephone;
@Email(message = "格式不正确")
private String email;
- 在contrller层中对实体类使用@valid来进行对前端传来的数据进行验证,并使用BindingResult返回错误信息:
public String addOrUpdate(@RequestBody @Valid User requestUser , BindingResult bindingResult) {
String error = null;
//如果验证中出现错误
if(bindingResult.hasErrors()){
//获取所有错误信息后选取第一个存储至error中。
error=bindingResult.getAllErrors().get(0).getDefaultMessage();
}
userService.addOrUpdate(requestUser);
//返回错误
return error;
}
- 下面是我故意将信息填错后返回的错误信息:
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='格式不正确', propertyPath=email, rootBeanClass=class com.example.demo.Pojo.User, messageTemplate='格式不正确'}
]