背景

最近有负责维护一个专门做对外数据接口的项目,由于接口数据需要加密,而且解密后的数据需要校验,手动ifelse判断非常繁琐,因此想使用hibernate validator在数据解密后手动进行校验。

依赖

需要使用以下几个依赖,这里我是用的是maven,如果没有使用maven可以手动下载jar包引入。

需要注意的一点是,如果你使用的是Jdk8,hibernate-validator不要使用7以上的版本。

以及,在某些情况下可能需要引入jboss-logging包(如果报错)

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml/classmate -->
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.el/javax.el-api -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/el-impl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>

实体类添加注解校验

如果需要对嵌套的实体类也进行校验,需要在属性上加上@Valid注解,比如下面的equipments

@Data
@Accessors(chain = true)
public class Gamer {
@NotBlank(message = "角色名称不能为空")
private String name;
@Range(min = 0, max = 1, message = "性别只能是0或1")
private Integer sex;
@Min(value = 1, message = "攻击力最低为1")
private Integer attack;
@Min(value = 1, message = "防御力最低为1")
private Integer defense;
@Valid
@Size(min = 1, message = "装备列表不能空")
private List<Equipment> equipments = new ArrayList<>();
}
@Data
@Accessors(chain = true)
public class Equipment {
@NotBlank(message = "装备名称不能为空")
private String name;
@NotNull(message = "装备类型不能为空")
private Integer equipmentType;
}

编写校验工具类

public class ValidationUtil {

    // 如果只需要返回第一个校验失败的信息,需要将下面的failFast设置为true
private static Validator validator = Validation
.byProvider(HibernateValidator.class)
.configure()
.failFast(false)
.buildValidatorFactory()
.getValidator(); public static <T> void validate(T bean) {
Set<ConstraintViolation<T>> validate = validator.validate(bean);
Iterator<ConstraintViolation<T>> it = validate.iterator();
for (; it.hasNext(); ) {
ConstraintViolation<T> next = it.next();
System.out.println(next);
}
}
}

测试

编写测试类进行测试

public class ValidationUtilTest {
@Test
public void testValidate() {
Gamer gamer = new Gamer();
gamer.setName("小红帽");
gamer.setAttack(-1);
gamer.setDefense(10);
gamer.setSex(0);
Equipment equipment = new Equipment().setEquipmentType(1);
gamer.getEquipments().add(equipment);
ValidationUtil.validate(gamer);
}
}

结果

普通Java项目使用Hibernate Validator进行数据校验参数校验 校验Bean的更多相关文章

  1. Java项目往数据库中插入数据,出现中文乱码

    项目环境: JSP+Servlet+Mysql数据库 需要检查的地方: 1. java项目整体的编码格式为utf-8.并且将数据传递给数据库之前,数据是否依旧是正常的(可以通过打断点的方式一步步跟踪查 ...

  2. Java笔记 #07# Hibernate Validator

    Hibernate Validator是Spring Boot默认附带的标准校验API(javax.validation)实现. 应用实例(配合切面) 采用注解定义切面.java @Aspect @C ...

  3. 一个简单的java项目使用hibernate连接mysql数据库

    实体类与表对应文件Customer.hbm.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTY ...

  4. spring 项目中使用 hibernate validator验证输入参数

    1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...

  5. hibernate Validator 6.X 的学习,bean的约束(字段,get方法上的验证)

    一:背景说明 验证数据是一个常见的任务,它贯穿于所有应用层,从呈现到持久层.通常在每个层中都执行相同的验证逻辑,耗时且容易出错.为了避免这些验证的重复,开发商往往把验证逻辑直接进入的领域模型,在领域类 ...

  6. Hibernate实现对数据的CRUD

    今天主要去看公司的老框架, CRUD用的较多,所以总结一下步骤,以免忘记的时候温习 回顾 JDBC 工作过程: 加载驱动 建立连接 定义sql,发生sql语句 执行sql语句获得执行结果 处理返回结果 ...

  7. spring boot 1.4默认使用 hibernate validator

    spring boot 1.4默认使用 hibernate validator 5.2.4 Final实现校验功能.hibernate validator 5.2.4 Final是JSR 349 Be ...

  8. 解决Hibernate validator抛出Ljavax/validation/ParameterNameProvider异常方法

    最近升级CAS Client4.0客户端Spring版本至Spring4.*以上,升级整合hibernate框架时,Hibernate validator 4.3.0.Final使用版本(从Hiber ...

  9. Hibernate validator验证

    spring-mvc配置 <mvc:annotation-driven validator="validator" /> <bean id="valid ...

  10. JSR303的数据校验-Hibernate Validator方式实现

    1.什么是JSR303? JSR303是java为bean数据合法性校验所提供的一个标准规范,叫做Bean Validation. Bean Validation是一个运行时的数据校验框架,在验证之后 ...

随机推荐

  1. AI提示词:一个通用C++ ECS系统实现(事件条件动作系统)

    AI提示词 using eca_cond = bool(*)(...); using eca_action = void(*)(...); class eca_info { public: eca_c ...

  2. 查询相册更加mysql 查询

    接到一个项目项目案例相册是这种结构 大佬建议 sql 查询 groip 进行时间统计今天 field根据mysql 时间查询进行统计 今天多少条 新增多少条相册 计算天数 $lists = Album ...

  3. Less中实现响应式设计的4种高效方案(手机、平板、电脑端)

    下是4种纯Less实现的响应式方案,均封装成可复用方法. 方案1:基础设备混合封装 // 定义设备断点变量 @mobile-max: 767px; @tablet-min: 768px; @table ...

  4. Python实验1 温度转换与输入输出强化

    实验任务: 实现摄氏温度与华氏温度互转(保留两位小数) 扩展功能:输入错误处理(如非数字输入提示重新输入) 扩展:支持开尔文温度的三向转换 源代码:def c_to_f(c): return c * ...

  5. CTF实验吧:登陆一下? 不一样的SQL注入

    http://ctf5.shiyanbar.com/web/wonderkun/web/index.html 发现 过滤了很多SQL敏感字符,并且 转码绕过也并不行 发现'和=没有进行过滤 考虑万能密 ...

  6. OpenStack 全套搭建部署指南(基于 Kolla-Ansible)

    一.环境准备 1. 硬件要求 控制节点:至少 4 核 CPU,8GB 内存,100GB 磁盘(推荐 SSD). 计算节点:根据虚拟机需求调整,建议 8 核 CPU,16GB 内存,200GB+ 磁盘. ...

  7. 消息验证码(MAC)的介绍

    目录 认证流程 MAC 的分类 认证加密 MAC的攻击手段 重发攻击 密钥推测攻击 消息认证码无法解决的问题 Reference 消息验证码(MAC)也可以称为消息认证码. 定义: 消息验证码(Mes ...

  8. Django Formsets总结

    formset是将多个表单用在同一个页面上的抽象层. 我们有: from django import forms class ArticleForm(forms.Form): title=forms. ...

  9. AI 制作游戏美术素材流程分享(程序员方向粗糙版)

    AI 制作游戏美术素材分享(程序员方向粗糙版) 视频讲解: 抖音:https://www.douyin.com/user/self?from_tab_name=main&modal_id=75 ...

  10. DOS命令快速启动和关闭MySQL服务

    为了搭建网格服务框架,在本地创建了MySQL数据库,但是,为了减少内存占用,MySQL数据库服务没有设置为自动启动,所以,需要手动的开启和关闭服务.因此,需要掌握一些短小精悍的DOS命令,下面介绍启动 ...