当前位置: 首页 > news >正文

Java中的标准注解与数据校验:深入解析与实例

目录

  • Java中的标准注解与数据校验:深入解析与实例
    • 1. 基础校验注解
      • `@NonNull`
      • `@NotBlank`
      • `@Size`
    • 2. 数值校验注解
      • `@Min` & `@Max`
      • `@Positive` & `@Negative`
    • 3. 枚举与模式匹配
      • 自定义注解示例(概念性展示)
    • 4. 自定义校验逻辑
    • 结论

Java中的标准注解与数据校验:深入解析与实例

在Java开发中,注解(Annotation)是一种强大的元数据形式,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、开发工具或者运行时环境使用来生成代码、进行编译检查或者执行特定的操作。特别是对于数据校验,Java提供了丰富的标准注解以及通过JSR 380(Bean Validation 2.0规范)支持的Hibernate Validator等框架,极大地简化了数据验证逻辑的编写。本文将详细介绍几种常用的Java标准注解及数据校验相关的注解,并通过代码示例加以说明。

1. 基础校验注解

@NonNull

确保被注解的元素(字段、方法参数)不能为null

public class User {@NonNull private String name; }

@NotBlank

检查字符串不为空且不只包含空白字符。

public class Address {@NotBlankprivate String street;
}

@Size

限制数组、集合、Map或字符串的大小。

public class PasswordPolicy {@Size(min = 8, max = 20)private String password;
}

2. 数值校验注解

@Min & @Max

限制数值类型的最小值和最大值。

public class Order {@Min(value = 1)@Max(value = 100)private int quantity;
}

@Positive & @Negative

确保数值为正数或负数。

public class TemperatureReading {@Positiveprivate double temperature;
}

3. 枚举与模式匹配

尽管标准库没有直接提供类似于题目中的@EnumValid,但可以通过自定义注解或使用第三方库(如Hibernate Validator)来实现更复杂的校验逻辑。

自定义注解示例(概念性展示)

随后需要一个对应的验证器实现类EnumValidator

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;@Documented
@Constraint(validatedBy = EnumValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidEnum {Class<? extends Enum<?>> enumClass();String message() default "{com.example.ValidEnum.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

4. 自定义校验逻辑

对于更复杂的校验需求,可以实现ConstraintValidator接口来自定义校验逻辑。

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;public class CustomValidator implements ConstraintValidator<CustomConstraint, String> {@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// 自定义校验逻辑return value != null && value.length() > 5;}
}

结论

Java中的标准注解和数据校验机制极大地提高了代码的可读性和维护性,减少了手动编写校验逻辑的工作量。通过合理利用这些注解,开发者可以快速构建健壮的数据验证层,确保应用的数据质量。无论是基本的数据类型检查,还是复杂的业务规则验证,Java的注解系统都能提供灵活而强大的支持。

相关文章:

Java中的标准注解与数据校验:深入解析与实例

目录 Java中的标准注解与数据校验&#xff1a;深入解析与实例1. 基础校验注解NonNullNotBlankSize 2. 数值校验注解Min & MaxPositive & Negative 3. 枚举与模式匹配自定义注解示例&#xff08;概念性展示&#xff09; 4. 自定义校验逻辑结论 Java中的标准注解与数据校…...

模型泛化性测试

文章目录 准备工作场景描述训练数据集获取与训练 测试结论测试方案外机进行平移外机进行旋转外机即平移又旋转该螺纹孔位置 准备工作 场景描述 场景搭建如下如所示&#xff1a; 在该场景中&#xff0c;将机器人安置在桌子左上角处&#xff08;以面对显示器的视野&#xff09…...

智能推荐系统:技术解析与实践指南

智能推荐系统&#xff1a;技术解析与实践指南 背景与挖掘目标 在互联网信息爆炸的今天&#xff0c;用户在海量内容中筛选感兴趣的信息变得日益困难。因此&#xff0c;搜索引擎结合推荐系统的模式应运而生。本章节将深入探讨推荐系统&#xff0c;其核心目标如下&#xff1a; …...

盛元广通数字孪生智能集控实验室管理系统

盛元广通数字孪生智能集控实验室管理系统可广泛应用于各类实验室场景&#xff0c;包括科研实验室、教学实验室、工业实验室等。通过实时监测、预测性维护、故障诊断与优化等功能&#xff0c;该系统能够提高实验室的运行效率、安全性和可靠性&#xff0c;降低运维成本。设计直观…...

Spring Boot 优雅进行数据脱敏

文详细解析在Spring Boot应用中优雅地脱敏敏感信息&#xff0c;如手机号、邮箱、身份证等&#xff0c;使用的是Jackson库中的JsonSerializer。 1. 创建自定义脱敏序列化器 首先&#xff0c;创建一个继承自JsonSerializer<String>的序列化器。以MobileSerializer为例&am…...

Vue3 条件语句

Vue3 条件语句 在Vue.js 3.x版本中&#xff0c;条件语句是一种常用的功能&#xff0c;用于根据特定条件渲染不同的DOM元素。Vue提供了几种方式来实现条件渲染&#xff0c;包括v-if、v-else-if、v-else以及v-show。本文将详细介绍这些条件语句的用法&#xff0c;并通过示例来展…...

小白想要快速学好office办公软件,主要学习以下几个方面?

Office办公软件培训通常包括以下几个核心内容&#xff1a; 1.**Word文档处理**&#xff1a;学习如何创建、编辑、格式化文本&#xff0c;插入图片、表格和图表&#xff0c;调整页面布局和样式&#xff0c;以及进行文档打印和共享。 2.**Excel电子表格**&#xff1a;掌握如…...

【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

操作系统管理物理内存以及与外设磁盘硬件进行数据的交换 操作系统如何管理物理内存呢&#xff1f; 其实操作系统内核先对内存先描述再组织的&#xff01;操作系统管理内存的基本单位是4KB&#xff0c;操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct pa…...

爱迪特两年创业板上市路:销售费用率远高同行,侵权风险引关注

《港湾商业观察》施子夫 王璐 从2022年4月7日就冲刺创业板的爱迪特&#xff08;秦皇岛&#xff09;科技股份有限公司&#xff08;以下简称&#xff0c;爱迪特&#xff09;&#xff0c;预计将很快登陆资本市场。 爱迪特日前披露中签结果&#xff1a;本次发行股份数量为约1902…...

SQLite 与 Python:集成与使用

SQLite 与 Python:集成与使用 SQLite 是一种轻量级的数据库管理系统,而 Python 是一种广泛使用的高级编程语言。这两种技术可以很好地结合在一起,为开发者提供强大的数据管理能力。本文将探讨如何在 Python 中集成和使用 SQLite,包括基本概念、安装过程、关键函数以及实际…...

【vue scrollTo 数据无限滚动 】

vue数据无限滚动 参考来源 Vue3 实现消息无限滚动的新思路 —— 林三心不学挖掘机 完整代码中项目中使用了vuetify&#xff0c;估div内的class会代表了对应的样式&#xff0c;根据需要自行删减。 功能实现主要依赖js代码部分。 鼠标悬浮停止滚动&#xff0c;鼠标离开恢复滚动在…...

MinIO在Linux环境中的使用

MinIO 是一个高性能的对象存储服务&#xff0c;兼容 Amazon S3 API。它设计用于大规模数据存储&#xff0c;可以很好地处理大数据集和高并发请求。如果你想在 Linux 系统上安装 MinIO&#xff0c;并开放必要的端口以便外部访问。 Vmware下载安装和linux安装这里就不在赘述了&a…...

免费内网穿透工具 ,快解析内网穿透解决方案

在IPv4公网IP严重不足的环境下&#xff0c;内网穿透技术越来越多的被人们所使用&#xff0c;使用内网穿透技术的好处有很多。 1&#xff1a;无需公网ip 物以稀为贵&#xff0c;由于可用的公网IP地址越来越少&#xff0c;价格也是水涨船高&#xff0c;一个固定公网IP一年的成本…...

踩坑——VS添加相对路径

需求&#xff1a;我需要将模型放到程序里面。 过程&#xff1a;附加包含目录添加目录&#xff0c;发现找不到onnx模型文件。我就想是不是相对路径不对&#xff0c;该来搞去都不对。 解决办法&#xff1a; 相对路径值得是运行程序的当下环境&#xff0c;什么是运行程序呢&…...

HTML【介绍】

HTML【介绍】 一、Web认知 1.网页组成 文字、图片、音频、视频、超链接 2.五大浏览器 IE浏览器、火狐浏览器&#xff08;Firefox&#xff09;、谷歌浏览器&#xff08;Chrome&#xff09;、Safari浏览器、欧朋浏览器&#xff08;Opera&#xff09; 3.Web标准的构成 HTML…...

网络安全:Web 安全 面试题.(XSS)

网络安全&#xff1a;Web 安全 面试题.&#xff08;XSS&#xff09; 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面&#xff1a; &#xff08;1&#xff09;基础知识:包括网络基础知识、操作系统知…...

Ubuntu网络管理命令:netstat

安装Ubuntu桌面系统&#xff08;虚拟机&#xff09;_虚拟机安装ubuntu桌面版-CSDN博客 顾名思义&#xff0c;netstat命令不是用来配置网络的&#xff0c;而是用来查看各种网络信息的&#xff0c;包括网络连接、路由表以及网络接口的各种统计数据等。 netstat命令的基本语法如…...

CV预测:快速使用DenseNet神经网络

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…...

竞赛选题 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…...

zerotier-one自建根服务器方法二

一、简介 zerotier-one免费账户有25设备的限制&#xff0c;如果自己的设备多了就需要付费。不过zerotier-one是开源软件&#xff0c;我们可以自己建立根服务器&#xff0c;不用付费速度还很快。 由于时间关系上一篇文章没有写完&#xff0c;今天继续。 二、准备工作 准备一…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...