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 ...
随机推荐
- linux应用之apache的源码安装(centos)
第一部分:前期准备 需要下载的东西 下载 Apache 源码包 下载地址: http://httpd.apache.org/download.cgi ...
- centos7搭建redis主从复制,并模拟故障切换。
Cntos7搭建redis主从复制,并模拟故障主从切换 主从复制搭建 主机:192.168.161.179 从机:192.168.161.180 1. 安装主redis 自己本地环境,关 ...
- 【C】四则运算生成和核对器----by郁卓、谢明浩
[Github项目地址] 完成功能: 1. 使用 -n 参数控制生成题目的个数 2. 使用 -r 参数控制题目中数值(自然数.真分数和真分数分母)的范围 3. 生成的题目中计算过程不能产生负数,也就是 ...
- 小心transform
张老师总结的,感谢! <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- BZOJ_1304_[CQOI2009]叶子的染色_树形DP
BZOJ_1304_[CQOI2009]叶子的染色_树形DP Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白 ...
- ACM学习历程—HDU 5326 Work(树形递推)
Problem Description It’s an interesting experience to move from ICPC to work, end my college life an ...
- 【Lintcode】112.Remove Duplicates from Sorted List
题目: Given a sorted linked list, delete all duplicates such that each element appear only once. Examp ...
- java-并发-进程和线程
浏览以下内容前,请点击并阅读 声明 软件的并发是指同时做多件事情,java平台一开始就支持并发编程,java编程语言以及类库含有对并发最基本的支持,从5.0版本开始,java平台开始包含一些高并发的A ...
- Swiper 滑动切换图片(可用于PC端,移动端)
作为一名后端的普通程序猿, 你让我搞这种前端不是跟我玩命吗,所以用插件来搞,省事又简单,而且Swiper使用又简单是吧: 头皮发麻,不喜欢说废话,我更喜欢直接看到效果: 按Swiper官方文档来说, ...
- 连接Oracle数据库的Hibernate配置…
连接Oracle数据库的Hibernate配置文件 连接Oracle的Hibernate配置文件有两种格式,一种是xml格式的,另一种是Java属性文件格式的.下面分别给出这两种格式配置文件的代码. ...