Java项目实现报文数据校验注解方式(必输项、值大小)

普通项目

  • 导入校验依赖

        <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.1.0.Final</version></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency>
  • 编写校验工具(使用validator框架校验工具)

package com.csvn.utils;import com.csvn.blogs.dto.BlogFileDto;
import org.hibernate.validator.HibernateValidator;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
import java.util.stream.Collectors;/*** @author haizhuangbu* @date 2024/5/14 12:56* @mark ValidatorUtils 校验工具*/
public class ValidatorUtils {private static Validator validator;private static final Object lockObj = new Object();/*** @param o* @return 返回异常信息*/public static String validator(Object o) {Validator validation = getValidation();Set<ConstraintViolation<Object>> validate = validation.validate(o);String errMessage = validate.stream().map(va -> va.getPropertyPath() + " : " + va.getMessage()).collect(Collectors.joining(","));return errMessage;}private static Validator getValidation() {if (validator == null) {synchronized (lockObj) {validator = Validation.byProvider(HibernateValidator.class).configure().buildValidatorFactory().getValidator();}}return validator;}}
  • 测试

  • 定义实体类

    package com.csvn.blogs.dto;import com.fasterxml.jackson.annotation.JsonFormat;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import org.hibernate.validator.constraints.NotBlank;import javax.validation.Valid;
    import java.util.Date;/*** @author haizhuangbu* @date 2024/4/24 21:29* @mark BlogFIleDto*/
    @Data
    @ApiModel("文件信息")
    @Valid
    public class BlogFileDto {@ApiModelProperty("文件id")@NotBlank(message = "文件id不能为空")private String fileId;@ApiModelProperty("文件名称")@NotBlank(message = "文件名称不能为空")private String fileName;@ApiModelProperty("文件路径")private String filePath;@ApiModelProperty("文件状态 Y 有效 N 失效")private String fileSts;@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")@ApiModelProperty("创建日期")private Date createTime;}
    
  • 调用工具校验

        BlogFileDto blogFileDto = new BlogFileDto();String validator1 = ValidatorUtils.validator(blogFileDto);System.out.println(validator1);
  • 测试效果


        

SpringBoot项目

  • 导入依赖

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.2.10.RELEASE</version>
    </dependency>
  • 接口使用(在接口实体类直接添加@Valid注解)

        @PostMapping("/saveContent")public Result<String> saveContentInfo(@Valid @RequestBody ContentInfo contentInfo) {blogsContentInfoService.insertContentInfo(contentInfo);return Result.of("内容插入成功");}
  • 通过异常拦截 @ControllerAdvice 获取校验异常

    package com.csvn.common;import org.springframework.context.support.DefaultMessageSourceResolvable;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;import java.util.stream.Collectors;/*** @author haizhuangbu* @date 2024/5/14 17:10* @mark RequestAdivce*/
    @RestControllerAdvice
    public class RequestAdvice {/*** @param methodArgumentNotValidException 方法参数校验异常* @return 异常信息*/@ExceptionHandler(value = MethodArgumentNotValidException.class)public Result methodError(MethodArgumentNotValidException methodArgumentNotValidException) {String errorMsg = methodArgumentNotValidException.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));return Result.error(errorMsg);}}
    

    拓展自定义实现参数校验(字典项校验) 

  • 自定义实现注解

    package com.csvn.utils.common;import javax.validation.Constraint;
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    import javax.validation.Payload;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;@Constraint(validatedBy = {NotInMap.NotInMapImp.class}
    )
    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface NotInMap {String key(); // 字典码值String message() default "不存在字典项";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};}
    

  • 自定义校验规则  

    class NotInMapImp implements ConstraintValidator<NotInMap, String> {String key;@Overridepublic void initialize(NotInMap annotation) {key = annotation.key();ConstraintValidator.super.initialize(annotation);}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// 查询数据库 通过key// select * from s_cde where key = #{key}return false; // obj == null}}
  • 最终结果

详细校验项(最大值、最小值....注解)https://mp.csdn.net/mp_blog/creation/editor/135977372

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装Redis,并在 Visual Studio Code 中使用它

Docker安装Redis 查找Redis docker search Redis完整结果 PS C:\Users\cheng> docker search Redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open …

System V IPC(进程间通信)机制详解

文章目录 一、引言二、System V IPC的基本概念1、IPC结构的引入2、IPC标识符&#xff08;IPC ID&#xff09;3、S ystem V的优缺点 三、共享内存&#xff08;Shared Memory&#xff09;1、共享内存的基本概念2、共享内存的创建&#xff08;shmget&#xff09;3、共享内存的附加…

python的文件操作及函数式编程介绍

五、文件操作 1、读取键盘输入 input 获取标准输入&#xff0c;数据类型统一为字符串 #!/usr/bin/python # -*- coding: UTF-8 -*- str input("请输入&#xff1a;") print&#xff08;"你输入的内容是: ", str&#xff09; 这会产生如下的对应着输入的…

KeyShot 2023.3 Pro for mac/win:完美融合3D渲染与动画制作

在当今数字化时代&#xff0c;视觉内容的创作和表现越来越受到重视。无论是产品设计、建筑规划&#xff0c;还是影视特效&#xff0c;都需要具备出色的3D渲染和动画制作工具来展现创意和想法。而作为业内领先的3D渲染和动画制作软件之一&#xff0c;KeyShot 2023.3 Pro在这个领…

电脑刚开机的时候不卡,用一会就变卡顿了…怎么回事?

前言 昨天咱们聊到旧电脑更换了固态硬盘之后&#xff0c;开机就会变快的事情&#xff0c;这个确实是可行且有效的升级电脑办法之一。 看完这篇之后&#xff0c;切莫着急升级电脑硬件配置&#xff0c;因为这里的坑比你想象的还要多。 从机械硬盘测试的数据和固态硬盘的测试数…

从CSDN搬家到微信公众号

博主将会在微信公众号里不断输出精品内容&#xff0c;陪伴大家共同成长。 如果你对博主的经历感兴趣&#xff0c;或者对博主的IT技术感兴趣&#xff0c;欢迎关注我的微信公众号&#xff0c;阅读我的技术文章&#xff0c;免费获取各种IT资源。也可以加我的微信成为我的好友&…

档案数字化加工是如何利用档案的

档案数字化加工是将纸质档案转化为数字形式&#xff0c;并进行后续的加工和利用。通过档案数字化加工&#xff0c;可以实现以下几个方面的利用&#xff1a; 1. 存储和保护&#xff1a;数字化档案可以将大量的纸质档案存储在数字存储介质中&#xff0c;从而节省空间和维护成本。…

面试算法之哈希专题

赎金信 class Solution { public:bool canConstruct(string ransomNote, string magazine) {// 小写字母int r_cnt[26];int m_cnt[26];for(int i 0; i< magazine.size(); i) {m_cnt[magazine[i]-a]; // 统计}// 对比for(int i 0; i< ransomNote.size(); i) {if(m_cnt[r…

使用vant-ui+vue3实现一个可复用的评星组件

如图所示 有两种情况 一种是5颗星 一种是3颗星 官网上只提供了图标类型的 并没有加文字 https://femessage-vant.netlify.app/#/zh-CN/ 自己结合两种情况 在全局注册了此组件(后续还会持续更新代码~) <template><div class"vant_rate_wrapper"><van…

【Javaer学习Python】 1、Django安装

安装 Python 和 PyCharm 的方法就略过了&#xff0c;附一个有效激活PyCharm的链接&#xff1a;https://www.quanxiaoha.com/pycharm-pojie/pycharm-pojie-20241.html 1、安装Django # 安装Django pip install Django# 查看当前版本 python -m django --version 5.0.62、创建项…

HTML常用标签-表格标签

表格标签 1 常规表格2 单元格跨行3 单元格跨行 1 常规表格 table标签 代表表格 thead标签 代表表头 可以省略不写 tbody标签 代表表体 可以省略不写 tfoot标签 代表表尾 可以省略不写 tr标签 代表一行 td标签 代表行内的一格 th标签 自带加粗和居中效果的td 代码 <h…

探索数据结构:堆的具体实现与应用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 堆的概念 堆(Heap)是计算机科学中一类特殊的数据结构。堆通常是一个…

C++ QT设计模式 (第二版)

第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库&#xff0c;由数个较小的库或者模块组成&#xff0c;最为常见的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;这些模块都需要在qmake的工程文件中启用 QTextStream 流&#xff0c;Qdat…

2024年高考倒计时精品网页

2024年高考倒计时精品网页 前言效果图部分代码领取源码下期更新预报 前言 随着季风轻轻掠过&#xff0c;岁月如梭&#xff0c;再次迎来了这个属于青春与梦想交汇的时刻——高考。这是一场知识的较量&#xff0c;更是一次意志的考验。在这最后的冲刺阶段&#xff0c;每一刻都显…

可视化 FlowChart 0.4.1 最强的拖拽组件

主要解决以及目标&#xff1a; ti-flowchart 能满足 二次开发的大部分需求。 下发GIF图可见&#xff0c;左边的模块A 由二次开发人员设计&#xff0c;通过向flowchart注册模块Dom&#xff0c;实现符合拖拽&#xff0c;编辑&#xff0c;布局&#xff0c;以及响应事件上抛。 实…

vaspkit 画 Charge-Density Difference

(echo 314;echo $(cat 1))|vaspkit 文件1提前写好使用的CHGCAR路径 SPIN_DW.vasp ../ML2scf/SPIN_DW.vasp ../ML1scf/SPIN_DW.vasp POSite and negative 默认为blue,and 青色 (RGB 30 245 245) 正值&#xff1a;blue 。负值&#xff1a;青色 RGB 30 245 245。 提示&…

(深度估计学习)Win11复现DepthFM

目录 1. 系统配置2. 拉取代码&#xff0c;配置环境3.开始深度预测4.运行结果 论文链接&#xff1a;https://depthfm.github.io/ 讲解链接&#xff1a;https://www.php.cn/faq/734404.html 1. 系统配置 本人系统&#xff1a;Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…

[Cesium]Cesium基础学习——Primitive

Cesium开发高级篇 | 01空间数据可视化之Primitive - 知乎 Primitive由两部分组成&#xff1a;几何体&#xff08;Geometry&#xff09;和外观&#xff08;Appearance&#xff09;。几何体定义了几何类型、位置和颜色&#xff0c;例如三角形、多边形、折线、点、标签等&#xff…

pdffactory pro8.0虚拟打印机(附注册码)

PdfFactory pro是一款非常受欢迎的PDF虚拟打印机&#xff0c;可以帮助用户将你的其他文档保存为PDF格式。请为用户提供打印/发送/加密等多种实用功能&#xff0c;以及一套完善的PDF打印方案。 使用说明 下载pdfFactory Pro压缩包&#xff0c;解压后&#xff0c;双击exe文件&am…

EEL中 python端的函数名是如何传递给js端的

python端的函数名是如何传递给js端的 核心步骤&#xff1a;将函数名列表注入到动态生成的 eel.js 中&#xff0c;这样前端一开始引用的eel.js本身已经包含有py_function的函数名列表了。你打开开发者工具看看浏览器中的 eel.js文件源代码就知道了。 具体实现&#xff1a; # 读…