博客
关于我
Service层中使用Hibernate Validator的方法
阅读量:220 次
发布时间:2019-03-01

本文共 3243 字,大约阅读时间需要 10 分钟。

Service层中使用Hibernate Validator的方法

为了简化项目中基础服务的参数校验,我们开发了一个通用的Service层方法,基于Hibernate Validator框架,帮助开发人员快速对参数进行校验。

通用方法

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.List;
import java.util.Set;
/**
* @Description: 通用Server validation方法
*
* @Author: zhangqi
* @create 2021/2/9 14:41
*/
@Component
public class Validators {
@Resource
private Validator validator;
/**
* 验证单个实体
* @param obj 实体
* @param
实体类类型
* @return 校验结果
*/
@SuppressWarnings("unused")
public String valid(T obj) {
return this.valid(obj, null);
}
/**
* 验证单个实体
* @param obj 实体
* @param group 组
* @param
实体类类型
* @return 校验结果
*/
public String valid(T obj, Class
group) {
Set
> violations = new Set<>();
if (group == null) {
violations = validator.validate(obj);
} else {
violations = validator.validate(obj, group);
}
if (CollectionUtils.isNotEmpty(violations)) {
for (ConstraintViolation
constraintViolation : violations) {
return constraintViolation.getMessage();
}
}
return null;
}
/**
* 验证列表
* @param objList 列表
* @param
实体类类型
* @return 校验结果
*/
@SuppressWarnings("unused")
public String validList(List
objList) {
return this.validList(objList, null);
}
/**
* 验证列表
* @param objList 列表
* @param group 组
* @param
实体类类型 * @return 校验结果 */ public String validList(List
objList, Class
group) { if (CollectionUtils.isEmpty(objList) || objList.size() <= 0) { return "对象空"; } for (T t : objList) { String result = null; if (group == null) { result = this.valid(t); } else { result = this.valid(t, group); } if (!StringUtils.isBlank(result)) { return result; } } return null; } }

实体示例

public class ShowDto extends Show {
private static final long serialVersionUID = 6389315097268352323L;
/**
* 页码
*/
@Min(value = 1, message = "页码不能小于一", groups = {Query.class})
@NotNull(message = "页码不能为空", groups = {Query.class})
private Integer pageNum;
/**
* 每页条数
*/
@Min(value = 1, message = "每页条数不能小于一", groups = {Query.class})
@NotNull(message = "每页条数不能为空", groups = {Query.class})
private Integer pageSize;
/**
* 开始时间
*/
@NotBlank(message = "开始时间不能为空", groups = {Query.class})
private String startTime;
/**
* 结束时间
*/
@NotBlank(message = "开始时间不能为空", groups = {Query.class})
private String endTime;
/**
* 查询条件限制
*/
public interface Query {}
}

使用方法

@Override
public Result test(ShowDto showDto) {
String validResult = validators.valid(showDto, ShowDto.Query.class);
if (StringUtils.isNotBlank(validResult)) {
return new Result(ErrorCodeEnum.NO, validResult);
}
return new Result(ErrorCodeEnum.OK);
}

通过这种方式,我们可以快速对各类参数进行校验,减少繁琐的空判断工作。

转载地址:http://cxwv.baihongyu.com/

你可能感兴趣的文章
nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Nessus漏洞扫描教程之配置Nessus
查看>>
Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
查看>>
NetApp凭借领先的混合云数据与服务把握数字化转型机遇
查看>>
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
netcat的端口转发功能的实现
查看>>
netfilter应用场景
查看>>
netlink2.6.32内核实现源码
查看>>
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
Netty WebSocket客户端
查看>>
netty 主要组件+黏包半包+rpc框架+源码透析
查看>>
Netty 异步任务调度与异步线程池
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
Netty事件注册机制深入解析
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty客户端断线重连实现及问题思考
查看>>
Netty工作笔记0006---NIO的Buffer说明
查看>>