自定义校验--校验json长度

news2024/11/15 12:23:15

mysql8中支持json格式的字段,某些情况下使用很方便,但也带来一个问题,就是它的最大长度不能设置,最大支持4GB,如果有恶意程序保存一条4GB的数据进去,估计这张表就要卡死了,所以要加一个自定义校验,校验下json的长度,这里使用hibernate validator校验

添加注解 

这里加个JsonLength注解,message就是校验不通过返回的默认信息,value就是最大长度,默认1024

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = JsonLengthValidator.class)
public @interface JsonLength {
    String message() default "最大长度不能超过{value}";

    // 自定义的验证组
    Class<?>[] groups() default {}; // 这里可以指定一个或多个验证组类

    Class<? extends Payload>[] payload() default {};

    // 可以添加自定义参数
    int value() default 1024;
}

添加校验类

initialize方法是初始化的时候执行,可以在这里获取到配置的值,每个@JsonLength注解都会实例化一个对象,isValid方法是每次校验时调用,先把对象序列化成json字符串,然后比较下是否超过最大长度就行了

public class JsonLengthValidator implements ConstraintValidator<JsonLength, Object> {
    private int maxLength;

    @Override
    public void initialize(JsonLength constraintAnnotation) {
        maxLength = constraintAnnotation.value();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if (value == null) return true;
        // 序列化成字符串,判断长度
        String jsonStr = JsonUtils.serialize(value);
        return jsonStr.length() <= maxLength;
    }
}

最后只要在新增的controller方法里面加上@Validated注解就可以了

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

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

相关文章

人体行走步态周期转换为不同相位描述

目录 一、步行周期 二、相关论文描述 三、参考文献 一、步行周期 人体行走时的步态状态通常采用传感器进行判断&#xff0c;比如Dong Jin Hyun等[1]通过嵌入两个力感应电阻的鞋垫来估计的步行状态&#xff0c;其中一个检测脚趾接触&#xff0c;另一个检测脚后跟接触[5]。Con…

制造企业SRM系统中如何进行供应商的管理

一、供应商选择与评估 在SRM系统中&#xff0c;供应商的选择和评估是第一步。企业需要建立一套科学的评估体系&#xff0c;涵盖以下几个关键方面&#xff1a; 1. 质量&#xff1a;评估供应商的产品质量、质量控制体系和质量改进能力。 2. 成本&#xff1a;分析供应商的价格竞…

华为2024 届秋招招聘——硬件技术工程师-电源方向-机试题(四套)(每套四十题)

华为 2024 届秋招——硬件-电源机试题&#xff08;四套&#xff09;&#xff08;每套四十题&#xff09; 岗位——硬件技术工程师 岗位意向——电源 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&am…

【python】一招教会你,python爬虫过程中怎么快速随机生成userAgent

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

rkllm模型量化构建

在发布的 RKLLM 工具链压缩文件中&#xff0c;包含了 RKLLM-Toolkit 的 whl 安装包、RKLLM Runtime 库的相关文件以及参考示例代码&#xff0c;github链接如下&#xff1a;https://github.com/airockchip/rknn-llm 环境准备 RKLLM-Toolkit 由于提供的rkllm_toolkit包为pytho…

Jetpack架构组件_ViewModel组件_2.AndroidViewModel

1.AndroidViewModel简介 “Application context aware ViewModel. Subclasses must have a constructor which accepts Application as the only parameter.” AndroidViewModel是感知应用程序上下文的ViewModel。子类必须有一个接受Application作为唯一参数的构造函数。 2.…

Leetcode Hot 100刷题记录 -Day2(哈希表)

一、字母异位词分组 问题描述&#xff1a; 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 简单理解&#xff1a;字母异位词就是字母个数和种类都相同&#xff0c;但字…

萤石云移动端sdk常见问题

使用萤石云的SDK时常会遇到各种问题 首先&#xff0c;请先查看错误码文档&#xff0c;这能解决其中的绝大多数&#xff01;&#xff01;&#xff01; 如果没有找到&#xff0c;可以看看下方这些常见问题能否解决你碰到的情况。&#xff08;iOS可以在打印日志中搜索opensdk er…

python查看wifi密码

抱歉&#xff0c;没有办法发出来&#xff0c;如果有需要的可以私信我&#xff01;&#xff01;&#xff01;

安卓13去掉权限动态申请,默认授权,不用动态申请权限

总纲 android13 rom 开发总纲说明 1、前言 2、问题分析 3.代码处理 4.代码修改 5.编译 6.彩蛋 1、前言

SpringBoot 一文复习知识点概览

目录 1、第一个SpringBoot程序 2、运行原理初探 2.1、pom.xml 2.2、启动器 spring-boot-starter 2.3、主启动类 2.4、注解 2.5、run方法流程分析 3、SpringBoot配置 3.1、yaml配置文件 3.2、JSR303数据校验 3.2.1、常见参数 3.3、多环境配置及配置文件优先顺序 3.…

基于yolov8的麦穗计数系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的麦穗计数系统是一种利用深度学习技术&#xff0c;特别是YOLOv8目标检测模型&#xff0c;对小麦麦穗进行自动识别和计数的系统。YOLOv8作为Ultralytics公司开发的最新版本&#xff0c;具备更高的性能和灵活性&#xff0c;能够在各种硬件平台上运行&am…

干货整理|一篇文章告诉你监控电脑的软件叫什么?10款电脑屏幕监控软件任你选择!(珍藏篇)

现代社会&#xff0c;电脑屏幕监控软件已成为企业管理和家庭教育中不可或缺的工具。 这类软件不仅可以帮助管理者监督员工的工作效率&#xff0c;保障企业信息安全&#xff0c;还能让家长更好地了解孩子的上网行为。 下面是精心挑选的10款备受好评的电脑屏幕监控软件&#xf…

【python】懂车帝字体反爬逐层解密案例(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

台灯怎么选对眼睛好?护眼台灯怎么选的六大技巧一定要看!

根据2024年国家卫健委最新公布的数据&#xff0c;我国儿童青少年总体近视率为52.7%&#xff0c;这一数据表明视力健康已成为不容忽视的问题。小学生近视率为42%&#xff0c;初中生高达80.7%&#xff0c;高中生更是达到了85.7%。儿童的学习环境对学习效果和视力健康有着重要影响…

系统中没有安装 git

系统中没有安装 git 安装git一、CentOS/RHEL 系统二、Ubuntu/Debian 系统 这个错误表明系统中没有安装 git。 安装git 一、CentOS/RHEL 系统 使用以下命令安装&#xff1a; sudo yum install git二、Ubuntu/Debian 系统 使用以下命令安装&#xff1a; sudo apt install g…

Java技术栈 —— Spark入门(二)之实时WordCount

Java技术栈 —— Spark入门&#xff08;二&#xff09; 一、kafka1.1 创建topic1.2 准备input与查看output 二、spark2.1 spark下的程序文件2.2 用spark-submit提交作业 参考文章&#xff1a; 参考文章或视频链接[1] 《Kafka Spark Stream实时WordCount》 实验环境&#xff…

使用dx工具将jar和class打包成dex

最近用到将三方jar和自己的class打包成dex的需求&#xff0c;研究了下&#xff0c;遇到了上些问题&#xff0c;最终成功了&#xff0c;记录下&#xff1a; 将jar放在ss目录下&#xff0c;将class放在与包名对应的目录下 com.example.myapplication.Heav.class 打包命令&#x…

android13固定app方向 强制app方向

总纲 android13 rom 开发总纲说明 1.前言 经常遇到客户有固定或者设置应用方向,不让他们改成其他方向的需求。今天我们就来处理这种问题。 2.问题分析 在 Android 10 之前,显示旋转的处理逻辑分散在多个类和模块中,Android 10 统一了这些逻辑,集中在 DisplayRotation.ja…

【数据结构】队列(Queue)

目录 队列概念 ​方法 队列模拟实现 链表实现队列 入队列 出队列 获取队头元素 数组实现队列 入队列 出队列 返回头队列 返回尾队列 完整代码 双链表实现队列 数组实现队列&#xff08;设计循环队列&#xff09; 队列概念 队列&#xff1a;只允许在一段进行插入…