javax.validation 效验工具(validation-api组件)使用教程

2024-02-13 14:32

本文主要是介绍javax.validation 效验工具(validation-api组件)使用教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在后端开发时,不可避免的需要处理一些校验, 如果是写if-else这种代码去校验, 那会有一大段这样的代码。不过还好有个校验插件:javax.validation.validation-api,不过一般会引用hibernate的校验组件:org.hibernate.hibernate-validator, 它已经引用了validation-api组件。

首先pom.xml引入依赖

   <!-- validator --><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.4.Final</version></dependency>

Spring配置注入bean

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

自己的Violation实体

这里使用的Lombok获取get和set,使用的@Getter注解 @Setter注解

import java.util.List;/*** @Auther: Summer* @Date: 2019-01-05 11:35* @Description:  测试实体类* @versions:1.0*/
@Getter
@Setter
public class TestVo {@NotBlank   // @NotBlank 必须是String类型的private  String  msg;@NonNull  // @NotNull:不能为null,但可以为empty,没有Size的约束private String id;private List<String> str;
}

接口工具类util

/*** @Auther: Summer* @Date: 2019-01-05 11:00* @Description: 接口效验* @versions:1.0*/
public class BeanValidator {private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();public static <T> Map<String, String> validate(T t, Class... groups) {Validator validator = validatorFactory.getValidator();Set validateResult = validator.validate(t, groups);if (validateResult.isEmpty()) {   //如果校验有值return Collections.emptyMap();} else {LinkedHashMap errors = Maps.newLinkedHashMap();Iterator iterator = validateResult.iterator();while (iterator.hasNext()) {ConstraintViolation violation = (ConstraintViolation)iterator.next();errors.put(violation.getPropertyPath().toString(), violation.getMessage());}return errors;}}public static Map<String, String> validateList(Collection<?> collection) {Preconditions.checkNotNull(collection); //判断是否为空Iterator iterator = collection.iterator();Map errors;do {if (!iterator.hasNext()) {return Collections.emptyMap();}Object object = iterator.next();errors = validate(object, new Class[0]);} while (errors.isEmpty());return errors;}public static Map<String, String> validateObject(Object first, Object... objects) {if (objects != null && objects.length > 0) {return validateList(Lists.asList(first, objects));} else {return validate(first, new Class[0]);}}

通过controller 验证Slf4j的log.info打印日志信息验证是否成功

package com.mmall.controller;
import com.mmall.common.JsonDate;
import com.mmall.param.TestVo;
import com.mmall.util.BeanValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
@Controller
@RequestMapping("/test")
@Slf4j
public class TestController {@RequestMapping("/validate.json")@ResponseBodypublic JsonDate validate(TestVo vo){log.info("validate");try {Map<String,String> map = BeanValidator.validateObject(vo);if(map != null && map.entrySet().size() >0){for (Map.Entry<String,String> entry: map.entrySet()){log.info("{}->{}",entry.getKey(),entry.getValue());}}}catch (Exception e){}return JsonDate.success("test,validate");}
}

打印结果:

附注解图:

这篇关于javax.validation 效验工具(validation-api组件)使用教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705779

相关文章

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@