不在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的更多相关文章

  1. Spring Boot 整合Hibernate Validator

    Spring Boot 整合Hibernate Validator 依赖 <dependencies> <dependency> <groupId>org.spri ...

  2. spring MVC 使用 hibernate validator验证框架,国际化配置

    spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...

  3. Spring Boot集成Hibernate Validator

    废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...

  4. 【实验一 】Spring Boot 集成 hibernate & JPA

    转眼间,2018年的十二分之一都快过完了,忙于各类事情,博客也都快一个月没更新了.今天我们继续来学习Springboot对象持久化. 首先JPA是Java持久化API,定义了一系列对象持久化的标准,而 ...

  5. Spring Boot邮箱链接注册验证

    Spring Boot邮箱链接注册验证 简单介绍 注册流程 [1]前端提交注册信息 [2]后端接受数据 [3]后端生成一个UUID做为token,将token作为redis的key值,用户数据作为re ...

  6. Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

      (转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题   这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...

  7. Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上 ...

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

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

  9. Spring Boot 3 Hibernate

    JdbcTemplate Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTemplate ...

随机推荐

  1. BZOJ3295:[CQOI2011]动态逆序对

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  2. AtCoder Regular Contest 070F:Honest Or Unkind

    题目传送门:https://arc070.contest.atcoder.jp/tasks/arc070_d 题目翻译 有\(n\)个人,其中有\(a\)个人是诚实的,另外\(b\)个是不诚实的.你可 ...

  3. 洛谷P1352——动规

    题目:https://www.luogu.org/problemnew/show/P1352 代码如下: #include<iostream> #include<cstdio> ...

  4. nginx web端口映射

    nginx web端口映射 举例: 问:在一台有外网的宿主机上部署了一个kvm虚拟机,在虚拟机上部署了web,需要外网访问此web,但虚拟机只有内网ip,只和宿主机通,怎么实现外网访问web服务? 答 ...

  5. Behave + Selenium(Python) 二

    介绍feature, py文件和之间关系: example01.feature文件包括5行: Feature行: 介绍这个feature用来干什么的: Scenario行:介绍这个scenario用来 ...

  6. Javascript Tip(!!)

    var a:var b=!!a; a默认是undefined.!a是true,!!a则是false,所以b的值是false,而不再是undefined,也非其它值,主要是为后续判断提供便利. !!一般 ...

  7. android apk 自我保护技术-完整性校验

    关于防止android apk被反编译的技术我们前面已经讲了四种. 加壳技术 运行时修改字节码 伪加密 对抗JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍.接下来我们接着介 ...

  8. Oracle的rowid

    ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...

  9. B - Simple Game

    B - Simple Game Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Su ...

  10. 慕课网java就业班级

    家里电脑教程路径: F:\教程\java-慕课 开发工具路径: D:\java 公司电脑:开发工具路径 J:\java\开发工具 教程路径: G:\学习中\廖雪峰的java教程\1-Java快速入门\ ...