Java之validator检验工具类

前言:最近才接触到了Java中的validator,参数检验依赖包,确实让我惊艳到了。臃肿的参数检验代码用几个注解就搞定了,这样在我们的代码中就只剩下业务的代码,真正做到了参数检验和业务代码的分离。

1、validation-api 原生注解。

注:引hibernate-validator依赖即可,这里只是对api原生介绍

@AssertTrue、@AssertFalse 作用在布尔类型的属性上,校验其值是true或者false
@DecimalMax、@DecimalMin 支持BigDecimal、BigInteger等类型,限定其最大值和最小值,包含界限值
@Min、@Max 支持int、BigDecimal、BigInteger等类型,限定最大值和最小值,包含界限值
@Digit 作用在数字上,有两个参数,分别是integer和fraction,integer用来限定小数点前的位数,fraction用来限定小数点后的位数
@Future 作用在日期类型上,根据官网的说法是Date和Calendar,要求传入的时间是未来的时间
@Past 此注解和Future是相反的,要求传入的时间是过去的时间
@Null 用来表示当前字段是否为null
@Size 作用在Collection集合、Map集合以及CharSequence类型(String是CharSequence子类),注解内有两个参数,分别是min、max,作为长度的上限和下限,包含上下限值
@Pattern 通过正则表达式表达式校验传入参数是否符合要求


注意:这里所列出来的是当前版本所提供的校验函数,依赖包是会不断的更新的(只有不断更新的依赖才是活跃的,才更加的强大),所以这里传授的是,学会看依赖中给我们提供了那些函数,函数的上方也会给我们介绍函数的作用。

2、基于Java原生接口实现的工具类hibernate-validator。

<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.0.20.Final</version>
</dependency>

注意:我现在使用的是validator是到maven中心仓拿取的使用数最多的版本,当你想要使用的时候,可能这个版本已经不是最优的版本。所以需要去中心仓去获取最优版本。中心仓链接

2.1、hibernate-validator的简单使用之post请求。

2.1.1、创建一个Java bean。

User类

package com.github.machine.control.pojo;import lombok.Data;
import lombok.Getter;
import lombok.Setter;import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;@Setter
@Getter
@Data
@Valid
public class User {@Pattern(regexp = "^[a-zA-Z]+$", message = "不合符要求")private String name;@Min(value = 12, message = "不能小于12")private int age;@Validprivate Detail detail;
}

Detail类

package com.github.machine.control.pojo;import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;@Data
@Setter
@Getter
public class Detail {@Length(min = 2, max = 30, message = "不在区间内....")private String describe;private String id;
}

这里有个非常需要注意的点是:private Detail detail; 属性上面必须添加@Valid,否则不会进行Detail的检验。

2.1.2、创建controller层

package com.github.machine.control.eps8826;import com.github.machine.control.pojo.User;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;@RestController
@RequestMapping("/demo")
public class EpsController {@RequestMapping(value = "user", method = RequestMethod.POST)public String user(@RequestBody @Valid User user, BindingResult bindingResult) {return  bindingResult.hasErrors() ? bindingResult.getFieldError().getDefaultMessage() : "success";}
}

这里必须要注意的两点

1、一定要添加@Valid 注解,否则不会进行user对象的检验。

2、一个要添加BindingResult,用来接收检验的结果,否则会就包报图二的错误。

图一

图二 (Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: ‘java.lang.String org.springframework.core.log.LogFormatUtils.formatValue(java.lang.Object, int, boolean)’] with root cause)

使用检验成功效果。

body

{"name": "lisi","age": 18,"detail": {"describe": "describe","id": "id1"}
}

检验失败效果

body

{"name": "lisi22","age": 18,"detail": {"describe": "describe","id": "id1"}
}

2.2、hibernate-validator的简单使用之GET请求。

@GetMapping("/error")
@ResponseBody
public String error(@RequestParam("name") @Size(min = 2, max = 5, message = "名字长度不合法") String name) {return "success";
}

String类型可以直接在controller层中添加注解。

Hibernate-validator封装注解
@NotBlank 这个注解其实不是validation包里面的,如果需要用它,需另外引入hibernate-validator包,用来限定属性不能为null和空串,一般都是用在String类型属性上,此注解会将传入的字符串的前面和后面的空清除,相当于执行了trim操作
@NotEmpty 限定属性不能为空,需要和@NotBlank注解区分开,两者有所不同,此注解不会执行trim操作
@Email 用来校验传入的数据是否符合邮箱格式的
@Range 范围值,包含两个主要的两个属性min和max,这个相当于对validator-api中@Min和@Max的再次封装,将两个注解合并为一个注解,包含边界值

3、代码看护,单元测试。

package com.github.machine.control.pojo;import org.apache.commons.validator.routines.DoubleValidator;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.util.CollectionUtils;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import javax.validation.Validator;
import java.util.Set;public class TestUser {private static Validator validator;@BeforeAllpublic static void init() {ValidatorFactory factory = Validation.buildDefaultValidatorFactory();validator = factory.getValidator();}@Testpublic void testValidUser() {User user = new User();user.setAge(12);user.setName("dffjj");Detail detail = new Detail();detail.setDescribe("j");detail.setId("id1");user.setDetail(detail);// 校验整个user对象属性final Set<ConstraintViolation<User>> validates = validator.validate(user);Assertions.assertTrue(CollectionUtils.isEmpty(validates));}@Testpublic void testValidateProperty() {User user = new User();user.setName("dffjj");// 校验整个user对象属性final Set<ConstraintViolation<User>> validates = validator.validateProperty(user, "name");Assertions.assertTrue(CollectionUtils.isEmpty(validates));}
}

3、commons-validator校验工具类。

        <dependency><groupId>commons-validator</groupId><artifactId>commons-validator</artifactId><version>1.7</version></dependency>

3.1 commons-validator的使用

@Test
public void testCommonsValid() {boolean b = DoubleValidator.getInstance().minValue(2.0, 1.0);boolean isEmail = EmailValidator.getInstance().isValid("123456789@qq.com");
}

3.2 commons-validator提供的函数列表

validator-tools相关推荐

  1. wordpress社交系统_WordPress的完整社交媒体备忘单(已更新)

    wordpress社交系统 If you are serious about your website or blog, then you simply can't ignore social med ...

  2. jQuery Tools:Web开发必备的 jQuery UI 库

    基本介绍 jQuery Tools 是基于 jQuery 开发的网站界面库,包含网站最常用的Tabs(选项卡).Tooltip(信息提示).Overlay(遮罩.弹窗).Scrollable(滚动控制 ...

  3. Azure Stack运维工具Azure Stack Tools的使用及实战

    源自 Azure 的 Azure stack 作为一款业界唯一的和领先的公有云平台一致的混合云平台,能够帮助企业客户从自有数据中心交付 Azure 云服务.作为<Azure Stack 技术深入 ...

  4. struts框架搭建及validator示例

    包看就会,如果哪没看懂,欢迎评论区留言交流或者私信 struts的validator示例 前置 0 项目地址 1 创建web工程 2 lib下导入jar包 3 写代码 1 创建struts项目 2 添 ...

  5. Android studio解决 sun.security.validator.ValidatorException

    使用adroid studio出现错误: Caused by: sun.security.validator.ValidatorException: PKIX path building failed ...

  6. No cached version of com.android.tools.build:gradle:2.0.0 available for offline mode.

    异常场景 从AS2.0升级到2.1,重新编译工程后,抛出了如下异常 Error:A problem occurred configuring root project 'AndroidStudioPr ...

  7. Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum required is 25.0.

    导入github上项目的时候出现 Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum ...

  8. MAC和windows开发操作系统环境,解决Maven工程中报 Missing artifact jdk.tools:jdk.tools

    同事使用的是苹果mac,而我们其他人的开发环境是windows jdk1.8 导致同事从git上pull下来的工程,pom文件是直接报错的, windows下的pom文件设置是这样的: 1 <d ...

  9. [转]Getting Start With Node.JS Tools For Visual Studio

    本文转自:http://www.c-sharpcorner.com/UploadFile/g_arora/getting-started-with-node-js-tools-for-visual-s ...

  10. 安装VMWare tools,以及解决安装后/mnt中有hgfs但没共享文件的方法

    一.首先是安装VMWare tools   安装过程可参考:http://www.cnblogs.com/jiu0821/p/7559949.html   二.解决安装VMWare tools后/mn ...

最新文章

  1. capistrano
  2. linux ntp 'ntp_request.c'远程拒绝服务漏洞,NTP拒绝服务漏洞(CVE-2015-5146)
  3. c语言冒泡法加逗号,Ubuntu 10.04 LTS 无法添加计算机的问题
  4. XCTF-高手进阶区:bug
  5. MFC学习中遇到的小问题和解决方案
  6. 福大软工1816 · 第一次作业 - 准备
  7. PAT 甲级 1003 Emergency 25分
  8. comsol光学仿真02
  9. php 9 698.00,698-00-0|2-溴-N,N-二甲基苯胺|2-bromo-N,N-dimethylaniline|2-Bromo-N,N-dimethylaniline......
  10. 各种通信接口的简单对比
  11. sql server数据库宕机原因分析
  12. 一、Docker 容器
  13. 2021年危险化学品经营单位主要负责人考试报名及危险化学品经营单位主要负责人复审考试
  14. Android 开发即时聊天工具 YQ :(五) 发送消息
  15. Linux群组与文件权限
  16. Python-Web之前端基础介绍(上)
  17. kafka小白教程从入门到精通
  18. Oracle基础之保留字和关键字
  19. Netty 4 传输对象 - 纵酒挥刀斩人头
  20. 基于51单片机的智能家居的设计(一)

热门文章

  1. AlsaLib基本使用(基于1.2.4版本)
  2. 沈阳建筑学计算机专硕调剂,沈阳建筑大学2020年硕士研究生招生考试网上调剂公告...
  3. mysql intersect 使用方法_MySQL查询优化一例——也说说 Using intersect
  4. android 蒙版图片带拖动_snapseed安卓蒙版(snapseed拼接两张图片)V1.6.8 手机版
  5. 复现 MonoEF:Monocular 3D Object Detection: An Extrinsic Parameter Free Approach
  6. anaconda-navigaotr出现adding featured channels并无法正常打开_CodingPark编程公园
  7. “人不知而不愠”-当别人不理解我们时,怎样保持好心情?
  8. 《黑客大曝光:移动应用安全揭秘及防护措施》一3.3 越狱:发泄愤怒
  9. 电影魔术|改变世界?乔布斯可不仅仅用苹果
  10. hxp 36C3 CTF Web题 WriteupBin Writeup (Selenium模拟点击+Content Security Policy+Nonce+Parsley.js触发错误提示)