首页 > 其他分享 >SpringBoot--手动校验@NotBlank、@NotNull等的工具类

SpringBoot--手动校验@NotBlank、@NotNull等的工具类

时间:2022-10-03 11:02:59浏览次数:62  
标签:constraintViolations SpringBoot -- import 校验 NotNull new validate validateError


简介

说明

        本文介绍手动校验@NotBlank、@NotNull等的工具类。

        使用场景:controller接口的入参很多,需要他人提供,但他人提供的类的字段很多,字段都没有加@NotNull等注解;而且这个类以后很可能再变动。

        解决方案:写一个中间类,将入参转换为中间类,在中间类的字段上加@NotBlank等注解,然后用本工具手动校验它。

优点

利用@NotBlank等校验,方便快捷

相关网址(详细用法)

​SpringBoot--用hibernate validator手动校验--方法/实例_IT利刃出鞘的博客springboot 手动校验​

代码

package com.knife.common.util;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import java.util.Set;

/**
* hibernate validator的校验工具
*/
public class ValidateUtil {
private static final Validator validator =
Validation.buildDefaultValidatorFactory().getValidator();

/**
* 校验实体类
*/
public static <T> void validate(T t) {
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
if (constraintViolations.size() > 0) {
StringBuilder validateError = new StringBuilder();
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
validateError.append(constraintViolation.getMessage()).append(";");
}

throw new ValidationException(validateError.toString());
}
}

/**
* 通过组来校验实体类
*/
public static <T> void validate(T t, Class<?>... groups) {
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t, groups);
if (constraintViolations.size() > 0) {
StringBuilder validateError = new StringBuilder();
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
validateError.append(constraintViolation.getMessage()).append(";");
}

throw new ValidationException(validateError.toString());
}
}
}

用法

User user = new User();
//对user字段赋值
ValidateUtil.validate(user);

标签:constraintViolations,SpringBoot,--,import,校验,NotNull,new,validate,validateError
From: https://blog.51cto.com/knifeedge/5729943

相关文章

  • SpringBoot--解决@Transactional与@CacheEvict联合使用导致的缓存与数据库的一致性问
    ​简介说明    本文介绍@Transactional与@CacheEvict联合使用导致的缓存与数据库的一致性问题的原因及解决方案。注解的作用        @Transactional:给当前......
  • 智慧农业系统 - 可视化大屏(Echarts)&管理系统(HTTP(S)协议)&物联网平台(MQTT协议)
    一、平台功能特点农业数据实时监控,实时视频监控,历史数据分析;支持电子地图,设备地理位置精确定位;支持多级组织结构管理,满足集团大客户需求;可视化大屏展示,数据指标一目了然,彰显......
  • 玩转 Flowable 流程实例
    文章目录​​1.捋清三个概念​​​​2.五种流程启动方式​​​​3.简单实践​​​​4.删除流程实例​​​​5.获取运行的活动节点​​​​上篇文章​​松哥和大家聊了......
  • Go的Struct结构体和(Json Form tag)
    Go的Struct结构体和(JsonFormtag)1.Struct1.1定义使用struct关键字可以定义一个结构体,结构体中的成员,称为结构体的字段或属性。typeMemberstruct{idin......
  • 视图集
    两个视图基类1.drf提供了一个顶层的视图APIView,可以通过继承APIView写视图,之后我们写的代码可能重复代码比较多,就可以使用面向对象的继承、封装,GenericAPIView继承了APIVi......
  • Docker中实现macvlan的穿透访问
    需求因为性能等原因,我们需要用macvlan方式部署container而kernel中有关macvlan的安全策略会完全过滤来自host访问host想要访问container服务端口很不方便。破解实现ho......
  • 洛谷 P3388 【模板】割点(割顶)
    题目链接:https://www.luogu.com.cn/problem/P3388 【模板】割点(割顶)题目背景割点题目描述给出一个$n$个点,$m$条边的无向图,求图的割点。输入格式第一行输入两个......
  • 人如蝼蚁,跌倒再起。
    ......
  • 10.2模拟赛总结
    模拟赛总结T1预计得分:100实际得分:30挂分原因:式子推错了没开longlongT2预计得分:80实际得分:80T3预计得分:50实际得分:10挂分原因:单调栈右半部分写错了T4......
  • 多媒体——图片——从相册中选取图片
       系统相册既支持只选择一张图片,也支持同时选择多张图片。 跳到系统相册的代码例子如下: //创建一个内容获取动作的意图(准备跳到系统相册)IntentalbumInte......