JSR 303 - Bean Validation提供了一种后端数据校验支持,如果一键f12修改前端代码成功绕过前端校验,那么就会存入非法数据,所以后端校验十分重要。应该前端+后端+数据库的校验约束都不能少,全面保障数据规范安全。
在pom.xml引入依赖,不了解Maven可以点这里。
<!-- JSR303数据校验支持 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.Final</version>
</dependency>
<!-- tomcat7以下el表达式版本不兼容的话,还要导入下面jar包-->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
Constraint | 详细信息 |
---|---|
@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(value) | 被注释的元素必须符合指定的正则表达式 |
被注释的元素必须是电子邮箱地址 | |
@Length | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range | 被注释的元素必须在合适的范围内 |
上面是官网给出的所有校验规则,其中@Pattern是比较常用的,可以自定义规则。
在JavaaBean的属性上加上注解,其中message设置错误信息,可以不写使用默认。
public class User {
@NotNull(message="×:账号不能为空")
private Integer uid;
@NotNull
@Length(min=6,max=20,message="×:密码长度须为6-20")
private String password;
@Pattern(regexp="(^[a-zA-Z0-9_-]{3,16}$)|(^[\u2E80-\u9FFF]{2,5})"
,message="×:用户名为2-5中文或3-16英文数字组合")
private String name;
//@Pattern(regexp="^([a-zA-Z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
// ,message="×:邮箱格式错误")
@Email
private String email;
@Past
private Date birthday;
在Controller方法的参数上加上@Valid注解,出错后的错误信息会放在 BindingResult 的对象参数中。
@PostMapping("/user")
@ResponseBody
public Msg saveUser(@Valid User user,BindingResult result){
if (result.hasErrors()){
Map<String,Object> map = new HashMap<>();
//校验失败,应该返回失败,在模态框中显示校验失败的错误信息
List<FieldError> errors = result.getFieldErrors();
for (FieldError fieldError:errors){
System.out.println("错误的字段名:"+fieldError.getField());
System.out.println("错误信息:"+fieldError.getDefaultMessage());
map.put(fieldError.getField(),fieldError.getDefaultMessage());
}
return Msg.fail().add("errorFields",map);
}else {
userService.saveUser(user);
return Msg.success();
}
}
原创不易,请勿转载(
本不富裕的访问量雪上加霜)