zoukankan      html  css  js  c++  java
  • SpringBoot 2 快速整合 | Hibernate Validator 数据校验

    概述

    在开发RESTFull API 和普通的表单提交都需要对用户提交的数据进行校验,例如:用户姓名不能为空,年龄必须大于0 等等。这里我们主要说的是后台的校验,在 SpringBoot 中我们可以通过使用 Hibernate Validator 来进行后台的数据校验的。

    闲话少说!接下来就开始介绍如何使用 Hibernate Validator 来进行数据的校验。

    Hibernate Validator 实战操作

    我们在添加用户的功能基础上来进行改造。

    用户Model类代码如下:

    public class User {
        private String name;
        private Integer age;
        //省略get and set 方法
    }
    

    用户Controller代码如下:

       @RequestMapping(value = "",method = RequestMethod.POST)
       public void add(User user){
           log.info("添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
       }
    

    第一步我们先在 User 类上添加校验的注解,具体代码如下:

    public class User {
      @NotEmpty(message="请输入您的名称!")
      private String name;
      @Max(value = 100, message = "年龄必须在20-100之间!")
      @Min(value= 20 ,message= "年龄必须在20-100之间!" )
      private Integer age;
      ..省略get 和set 方法
    }
    

    我们来大致说明一下 注解的含义:

    • 注解中message : 如果字段信息和检验规则不符合提示的错误信息。
    • 注解中的value: 表示字段信息限定的值。
    • @NotEmpty : 表示name 变量不能为空。
    • @Max: 表示年龄的最大值是多少。
    • @Min: 表示年龄的最小值是多少。

    第二步就是对用户添加方法进行改造

    用户添加方法中的 User 参数需要声明 @Valid 注解,添加该注解主要是指定要校验的参数实例,然后在添加用户方法中添加 BindingResult 参数。
    BindingResult:主要是存储校验结果的数据,我们可以通过 BindingResult 来判断校验是否通过和获取校验错误提示信息。

    具体代码如下:

      @PostMapping()
      public User add(@Valid User user,BindingResult bindingResult){
      	if(bindingResult.hasErrors()) {
      		String defaultMessage = bindingResult.getFieldError().getDefaultMessage();
      		System.out.println(defaultMessage);
      		return null;
          }
          log.info("springboot添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
      	return user;
      }
    

    测试:

    这里测试使用的是谷歌的一个插件工具:Advanced REST client 来完成的,你也可以选择你顺手的工具进行测试。

    测试用户名称为空的情况:
    图片
    后台日志输出如下:
    图片
    测试年龄不在20到100 的数据 :
    图片
    后台日志输出如下:
    图片

    Hibernate Validator详细介绍

    Hibernate Validator 是 实现JSR349的校验框架,他默认提供已经定义好的校验注解,我们经常使用的大致如下:

    • @NotNull: 校验字段是否为空
    • @NotEmpty: 校验数组集合map是否为空并且元素大于0
    • @Max(value=): 限定指端的最大值
    • @Min(value=): 限定字段的最小值
    • @Size(min=, max=): 校验集合map元素数量的范围
    • @Range(min=, max=): 校验数组String或者数据区间范围
    • @Email: 校验字段是否是邮箱
    • @Past: 校验是否是一个过期的日期
    • @NotBlank: 校验字符串是否非空 即 !=null&& equals("")
    • @Valid: 声明要校验数据的类参数
  • 相关阅读:
    栈的压入,弹出序列
    json格式实现批量删除
    ExtJS pagingtoolbar的使用
    Unknown initial character set index '45' received from server. Initial client ch
    事务的原子性
    整合Struts2.2+Spring3.0
    两种方法判断输入是否整数
    使用三种不同循环结构对1+2+3+...+100 求和
    使用循环的方式输出对应图形
    系统任务栏图标透明且无法打开解决办法 for Windows
  • 原文地址:https://www.cnblogs.com/jerry126/p/11531317.html
Copyright © 2011-2022 走看看