spring boot 使用hibernate validator 验证service
不在controller中验证,而是在service中验证。
spring boot 默认使用的就是hibernate validator,存在于pom的spring-boot-starter-web中。
1、Validators
import java.util.List;
import java.util.Set; import javax.validation.ConstraintViolation;
import javax.validation.Validator; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
/**
* 通用验证方法
*/
@Service
public class Validators {
@Autowired
private Validator validator; public <T> String valid(T obj) {
return this.valid(obj,null);
}
public <T> String valid(T obj,Class group) {
Set<ConstraintViolation<T>> violations = null;
if (group == null) {
violations = validator.validate(obj);
} else {
violations = validator.validate(obj,group);
}
if (!violations.isEmpty()) {
StringBuilder sb = new StringBuilder();
for (ConstraintViolation<T> constraintViolation : violations) {
sb.append("[").append(constraintViolation.getPropertyPath().toString()).append("=");
sb.append(constraintViolation.getInvalidValue());
sb.append(",");
sb.append(constraintViolation.getMessage());
sb.append("]");
}
return sb.toString();
} else {
return null;
}
}
public <T> String validList(List<T> objList) {
return validList(objList,null);
}
public <T> String validList(List<T> objList,Class group) {
if (CollUtil.isEmpty(objList) || objList.size()<=0) {
return "对象空";
}
StringBuilder sb = new StringBuilder();
String result = "";
for (int i = 0; i < objList.size(); i++) {
if (group == null) {
result = this.valid(objList.get(i));
} else {
result = this.valid(objList.get(i),group);
}
if (!StrUtil.isBlank(result)) {
sb.append(result);
}
}
if (!StrUtil.isBlankIfStr(sb)) {
return sb.toString();
} else {
return null;
}
}
}
2、entity注解
public class PrjDto extends BaseDtoAndApi {
@JSONField(name = "name", ordinal = 11)
@NotBlank(groups = PrjAddInfoReqChecker.class)
private String name;
@JSONField(name = "mem_list", ordinal = 24)
@NotEmpty
List<PrjMemberDto> memList;
}
3、PrjAddInfoReqChecker
public interface PrjAddInfoReqChecker {
}
4、service
@Autowired
private Validators validators; @Transactional(readOnly=false)
public ReMsg addPrj(PrjAddInfoReq prjAddInfoReq) {
log.info("接收:{}",JSONObject.toJSONString(prjAddInfoReq,true));
ReMsg reMsg = null;
Integer rs = null; String validResult = validators.valid(prjAddInfoReq,PrjAddInfoReqChecker.class);
if (!StrUtil.isBlankIfStr(validResult)) {
reMsg = new ReMsg("999",validResult);
return reMsg;
}
//验证集合中的对象
String validListResult1 = validators.validList(prjAddInfoReq.getMemList(),PrjAddInfoReqChecker.class);
if (!StrUtil.isBlankIfStr(validListResult1)) {
reMsg = new ReMsg("999",validResult);
return reMsg;
}
......
}
spring boot 使用hibernate validator 验证service的更多相关文章
- Spring Boot 整合Hibernate Validator
Spring Boot 整合Hibernate Validator 依赖 <dependencies> <dependency> <groupId>org.spri ...
- spring MVC 使用 hibernate validator验证框架,国际化配置
spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...
- Spring Boot集成Hibernate Validator
废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...
- 【实验一 】Spring Boot 集成 hibernate & JPA
转眼间,2018年的十二分之一都快过完了,忙于各类事情,博客也都快一个月没更新了.今天我们继续来学习Springboot对象持久化. 首先JPA是Java持久化API,定义了一系列对象持久化的标准,而 ...
- Spring Boot邮箱链接注册验证
Spring Boot邮箱链接注册验证 简单介绍 注册流程 [1]前端提交注册信息 [2]后端接受数据 [3]后端生成一个UUID做为token,将token作为redis的key值,用户数据作为re ...
- Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
(转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题 这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...
- Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别
Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty 用在集合类上面 @NotBlank 用在String上 ...
- spring 项目中使用 hibernate validator验证输入参数
1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...
- Spring Boot 3 Hibernate
JdbcTemplate Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTemplate ...
随机推荐
- redis实现分布式锁——核心 setx+pipe watch监控key变化-事务
如何设计一把分布式锁 我们用 redis 来实现这把分布式的锁,redis 速度快.支持事务.可持久化的特点非常适合创建分布式锁. 分布式环境中如何消除网络延迟对锁获取的影响 锁,简单来说就是存于 r ...
- div img 垂直水平居中
<style> div { width: 600px; height: 578px; text-align: center; display: table-cell; vertical-a ...
- About getByClass
不能获取class为多个的情况 function getByClass(parent,cls){ var res=[]; var ele=parent.getElementsByTagName(&qu ...
- <十七>UML核心视图动态视图之时序图
一:时序图 --->时序图是用于描述按时间顺序排列的对象之间的交互模式. --->它按照参与交互的对象所具有的“生命线”和他们相互发送的消息来显示这些对象. --->时序图包含对象和 ...
- BZOJ4571:[SCOI2016]美味
浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.p ...
- Oracle创建表,并添加默认值和备注
create table testemp( id varchar2(50) default sys_guid(),deptno varchar2(20) ,--部门编码 ename varchar2( ...
- js css3实现钟表效果
原理: 利用transform-origin改变旋转的圆心,实现秒数和分钟数的刻度线,利用transfrom translate实现钟表小时刻度的显示 html: <div class=&quo ...
- 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库
编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...
- 演讲:对 2000 多亿条数据做一次 group by 需要多久?
http://2017.qconbeijing.com/presentation/646?utm_source=weibo&utm_medium=infoq&utm_campaign= ...
- [转]对 td 使用 overflow:hidden; 无效的几点错误认识
转载:http://www.cftea.com/c/2010/12/UVBUCD0J888L2XPQ.asp 一.是 td 的原因. 其实这关 td 什么事呢?div 也是一样的,看示例: <d ...