介绍
验证流程:
- 前端视图
- 后端后台(防止跳过视图发送数据)
- 数据库
常见于对前端数据检验
实体类是用于存储到数据库中,所以不推荐在上面使用注解,一般会创建一个实体类对应的vo类用于接收和检验数据,检验后使用拷贝工具拷贝的对应实体类
使用案例
后端案例
@Valid
标记用于级联(Bean)验证的属性、方法参数或方法返回类型。result
这个结果集中存放了验证信息,错误检验结果从结果集中获取验证信息,不通过会有对应检验信息
@PostMapping("/add")
public ResultVo add(@Valid User user, BindingResult result) throws JsonProcessingException {
ResultVo vo = new ResultVo();
if (result.hasErrors()) {
Map<String, String> map = new HashMap<>();
// 字段名为 key,错误信息为 value
result.getFieldErrors().forEach(fieldError -> map.put(fieldError.getField(), fieldError.getDefaultMessage()));
log.info("jlaesifjhoisejpoihnlkj");
vo.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
String messages = new ObjectMapper().writeValueAsString(map);
vo.setMessage(messages);
vo.setData(errors);
}
return vo;
}
前端案例
```
# 配置
## Maven 依赖(请按需选择版本,否则出现版本兼容性问题)
集成 hibernate bean 验证器
```xml
org.hibernate.validator hibernate-validator 6.0.23.Final
实体类对应的VO对象
public class UserVo {
/**
* 验证空串(注解元素不能为null或空)
*/
@NotEmpty(message = "{user.name.notEmpty}")
private String name;
// 验证空值
@NotNull(message = "{user.age.notNull}")
// 最小值访问
@Min(value = 18,message = "{user.age.min}")
private Integer age;
@NotNull(message = "请输入出生日期")
private Date birth;
// 验证邮箱
@NotEmpty(message = "{user.email.notEmpty}")
@Email(message = "{user.email.mail}")
private String email;
}
message.properties 配置文件
user.name.notEmpty = 请输入用户名
user.age.notNull = 请输入年龄
user.age.min = 网站不支持18岁下访问
user.email.notEmpty = 请输入邮箱
user.email.mail = 请输入合法的邮箱地址
SpringMVC配置文件
目的是解析配置文件,使其提示和实体类VO解耦,使用场景比如多语言环境
其中集成了内部资源解析器
classpath:message(配置文件名)