SpringMVC 后端数据验证

SpringMVC 后端数据验证

介绍

验证流程:

  1. 前端视图
  2. 后端后台(防止跳过视图发送数据)
  3. 数据库

常见于对前端数据检验

实体类是用于存储到数据库中,所以不推荐在上面使用注解,一般会创建一个实体类对应的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.validatorhibernate-validator6.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(配置文件名)