【Java万花筒】表单验证与数据校验库:拓展你的Java应用

表单验证与数据校验库:为你的Java应用增添安全护盾

前言

在开发Java应用的过程中,表单验证和数据校验是非常重要的一部分。确保用户输入的数据符合预期的规则和格式,可以增加系统的稳定性和安全性。为了简化表单验证和数据校验的过程,提高开发效率,我们可以使用一些优秀的Java库来处理这些任务。

本文将介绍一些常用的表单验证与数据校验库,包括 Hibernate Validator、Apache Commons Validator 等。我们将深入了解每个库的概述、特点和使用方式,并提供详细的Java实例代码来演示它们的用法。通过阅读本文,你将掌握这些库的基本原理和使用技巧,为你的Java应用添加强大的表单验证和数据校验功能。

欢迎订阅专栏:Java万花筒

文章目录

  • 表单验证与数据校验库:为你的Java应用增添安全护盾
    • 前言
      • 1. Hibernate Validator
        • 1.1 概述
        • 1.2 注解验证
        • 1.3 自定义规则
      • 2. Apache Commons Validator
        • 2.1 概述
        • 2.2 工具类
          • 2.2.1 表单验证工具类
          • 2.2.2 数据校验工具类
      • 3. jOOQ
        • 3.1 概述
        • 3.2 查询构建器
        • 3.3 SQL 生成
        • 3.4 数据库操作
      • 4. Apache POI
        • 4.1 概述
        • 4.2 Excel处理
          • 4.2.1 读取Excel
          • 4.2.2 写入Excel
      • 5. Apache Commons Lang
        • 5.1 概述
        • 5.2 字符串操作
        • 5.3 类型转换
        • 5.4 数组操作
      • 6. JUnit
        • 6.1 概述
        • 6.2 单元测试框架
        • 6.3 断言方法
        • 6.4 测试套件
    • 总结

1. Hibernate Validator

1.1 概述

Hibernate Validator 是一个用于数据验证和校验的 Java 库,它是对 JSR 380 中定义的 Bean Validation 规范的实现。通过使用 Hibernate Validator,开发人员可以轻松地进行数据验证,确保传入的数据符合指定的规则。它支持注解和自定义规则,并可以与各种框架和技术集成,例如 Spring,Java EE 等。

1.2 注解验证

Hibernate Validator 提供了丰富的内置注解来进行数据验证。你可以在实体类的属性上使用这些注解,来指定属性的验证规则。以下是一些常用的注解示例:

import javax.validation.constraints.*;public class User {@NotNull(message = "用户名不能为空")@Size(min = 4, max = 20, message = "用户名长度应在4到20个字符之间")private String username;@NotEmpty(message = "密码不能为空")@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$",message = "密码必须包含字母、数字,并且至少8个字符")private String password;// getter and setter methods
}
1.3 自定义规则

除了使用内置注解,Hibernate Validator 还支持自定义规则来进行数据验证。你可以创建自定义的验证注解,并定义验证规则的逻辑。以下是一个自定义验证注解的示例:

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomValidator.class)
public @interface CustomValidation {String message() default "自定义验证失败";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};// other attributes for the annotation
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;public class CustomValidator implements ConstraintValidator<CustomValidation, String> {@Overridepublic void initialize(CustomValidation constraint) {}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// custom validation logicreturn value != null && value.startsWith("Custom");}
}

2. Apache Commons Validator

2.1 概述

Apache Commons Validator 是一个提供了一系列用于表单验证和数据校验的工具类的 Java 库。它提供了各种常用的校验器,用于验证邮箱、URL、数字、日期等不同类型的数据。同时,它还提供了一些实用的工具类,用于处理字符串、格式化数据等操作。

2.2 工具类
2.2.1 表单验证工具类

Apache Commons Validator 提供了一些常用的表单验证工具类,可以用于验证用户输入的表单数据是否符合要求。以下是一些常用的表单验证工具类的示例:

import org.apache.commons.validator.routines.EmailValidator;public class UserForm {private String name;private String email;public UserForm(String name, String email) {this.name = name;this.email = email;}public boolean isValid() {return name != null && email != null &&!name.isEmpty() && EmailValidator.getInstance().isValid(email);}// other methods
}
2.2.2 数据校验工具类

除了表单验证,Apache Commons Validator 还提供了一些数据校验的工具类,可以用于验证数据的格式、范围等。以下是一些常用的数据校验工具类的示例:

import org.apache.commons.validator.routines.IntegerValidator;
import org.apache.commons.validator.routines.RangeValidator;public class NumberValidator {public static void main(String[] args) {IntegerValidator integerValidator = IntegerValidator.getInstance();RangeValidator<Integer> rangeValidator = new RangeValidator<>(0, 100);String numberStr = "42";if (integerValidator.isValid(numberStr) && rangeValidator.isValid(numberStr)) {int number = integerValidator.validate(numberStr);System.out.println("Valid number: " + number);} else {System.out.println("Invalid number");}}
}

3. jOOQ

3.1 概述

jOOQ(Java Object Oriented Querying)是一个用于构建类型安全的 SQL 查询的 Java 库。它通过在 Java 代码中使用完全类型安全的 API 来构建 SQL 查询,避免了手动编写 SQL 语句和拼接字符串的繁琐过程。使用 jOOQ,你可以方便地创建复杂的查询,并与各种数据库进行交互。

3.2 查询构建器

jOOQ 提供了一个强大的查询构建器,可以用于构建各种类型的查询。以下是一个简单的示例,演示了如何使用 jOOQ 构建一个查询:

import static org.jooq.impl.DSL.*;public class EmployeeQuery {public static void main(String[] args) {String keyword = "Smith";SelectConditionStep<Record> select = select().from(table("employees")).where(field("last_name").like("%" + keyword + "%")).orderBy(field("first_name"));System.out.println(select.getSQL());}
}
3.3 SQL 生成

jOOQ 可以根据数据库的元数据信息生成各种类型的 SQL 语句,包括创建表,插入数据,更新数据等。以下是一个示例,演示了如何使用 jOOQ 生成创建表的 SQL 语句:

import org.jooq.DDLQuery;
import org.jooq.impl.DSL;public class CreateTableQuery {public static void main(String[] args) {DDLQuery createTable = DSL.createTable("employees").column("id", Integer.class).notNull().constraint(DSL.primaryKey("id")).column("first_name", String.class).column("last_name", String.class).execute();System.out.println(createTable.getSQL());}
}
3.4 数据库操作

jOOQ 还提供了一些方便的方法来执行数据库操作,包括插入、更新、删除、查询等。以下是一个示例,演示了如何使用 jOOQ 进行数据库查询:

import org.jooq.*;
import org.jooq.impl.DSL;public class EmployeeDao {private final DSLContext dsl;public EmployeeDao(Configuration configuration) {this.dsl = DSL.using(configuration);}public Result<Record> searchEmployees(String keyword) {return dsl.select().from(table("employees")).where(field("last_name").like("%" + keyword + "%")).orderBy(field("first_name")).fetch();}
}

4. Apache POI

4.1 概述

Apache POI 是一个用于操作 Microsoft Office 格式文件(如 Excel、Word、PowerPoint 等)的 Java 库。通过使用 Apache POI,你可以读取、写入和修改这些格式的文件。它提供了一组 API 来处理不同类型的 Office 文件,其中最常用的是针对 Excel 文件的 API。

4.2 Excel处理
4.2.1 读取Excel

Apache POI 提供了多种方式来读取 Excel 文件,包括读取单元格数据、读取整个表格、读取特定的行列等。以下是一个示例,演示了如何使用 Apache POI 读取 Excel 文件中的数据:

import org.apache.poi.ss.usermodel.*;import java.io.FileInputStream;
import java.io.IOException;public class ExcelReader {public static void main(String[] args) {String excelFilePath = "path/to/excel/file.xlsx";try (Workbook workbook = WorkbookFactory.create(new FileInputStream(excelFilePath))) {Sheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {for (Cell cell : row) {CellType cellType = cell.getCellType();if (cellType == CellType.STRING) {System.out.print(cell.getStringCellValue() + "\t");} else if (cellType == CellType.NUMERIC) {System.out.print(cell.getNumericCellValue() + "\t");}}System.out.println();}} catch (IOException e) {e.printStackTrace();}}
}
4.2.2 写入Excel

Apache POI 还提供了多种方式来写入 Excel 文件,包括写入单元格数据、添加表格、设置样式等。以下是一个示例,演示了如何使用 Apache POI 写入数据到 Excel 文件:

import org.apache.poi.ss.usermodel.*;import java.io.FileOutputStream;
import java.io.IOException;public class ExcelWriter {public static void main(String[] args) {String excelFilePath = "path/to/excel/file.xlsx";try (Workbook workbook = WorkbookFactory.create(true)) {Sheet sheet = workbook.createSheet("Sheet1");Row headerRow = sheet.createRow(0);Cell headerCell = headerRow.createCell(0);headerCell.setCellValue("Name");Row dataRow = sheet.createRow(1);Cell dataCell = dataRow.createCell(0);dataCell.setCellValue("John Doe");try (FileOutputStream outputStream = new FileOutputStream(excelFilePath)) {workbook.write(outputStream);} catch (IOException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}}
}

5. Apache Commons Lang

5.1 概述

Apache Commons Lang 是一个常用的 Java 工具类库,提供了一组实用的函数和工具类,用于进行字符串操作、类型转换、数组操作等。使用 Apache Commons Lang,你可以更方便地进行各种常见的编程任务。

5.2 字符串操作

Apache Commons Lang 提供了一些实用的方法来操作字符串,包括字符串判空、去除空格、大小写转换、字符串分割等。以下是一些常见的字符串操作示例:

import org.apache.commons.lang3.StringUtils;public class StringUtil {public static void main(String[] args) {String str = "   Hello, World!   ";System.out.println(StringUtils.isBlank(str));                // falseSystem.out.println(StringUtils.trim(str));                   // "Hello, World!"System.out.println(StringUtils.upperCase(str));              // "   HELLO, WORLD!   "System.out.println(StringUtils.split(str, ",")[0]);          // "   Hello"}
}
5.3 类型转换

Apache Commons Lang 提供了一些实用的方法来进行不同类型之间的转换,包括字符串到数值类型、数值类型到字符串、日期类型到字符串等。以下是一些常见的类型转换示例:

import org.apache.commons.lang3.math.NumberUtils;public class NumberUtil {public static void main(String[] args) {String numberStr = "42";int number = NumberUtils.toInt(numberStr);System.out.println(number);                       // 42String numberStr2 = NumberUtils.toString(number);System.out.println(numberStr2);                   // "42"}
}
5.4 数组操作

Apache Commons Lang 提供了一些实用的方法来操作数组,包括数组拷贝、数组反转、数组判空等。以下是一些常见的数组操作示例:

import org.apache.commons.lang3.ArrayUtils;public class ArrayUtil {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};int[] copiedArray = ArrayUtils.clone(array);ArrayUtils.reverse(copiedArray);System.out.println(ArrayUtils.isEmpty(array));               // falseSystem.out.println(array.length);                            // 5System.out.println(ArrayUtils.toString(array));              // "{1, 2, 3, 4, 5}"System.out.println(ArrayUtils.toString(copiedArray));        // "{5, 4, 3, 2, 1}"}
}

6. JUnit

6.1 概述

JUnit 是一个用于编写和执行单元测试的 Java 框架。它提供了一组断言方法和测试注解,可以帮助开发人员编写可自动执行并验证代码功能的测试用例。通过使用 JUnit,你可以更容易地进行单元测试的编写和管理。

6.2 单元测试框架

JUnit 提供了一个单元测试框架,可以用于创建和管理测试用例。通过使用 JUnit 的测试框架,你可以定义测试方法并使用断言方法验证预期结果与实际结果是否相符。以下是一个简单的测试类的示例:

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;public class CalculatorTest {@Testpublic void testAddition() {Calculator calculator = new Calculator();int result = calculator.add(2, 3);Assertions.assertEquals(5, result);}@Testpublic void testSubtraction() {Calculator calculator = new Calculator();int result = calculator.subtract(5, 3);Assertions.assertEquals(2, result);}
}
6.3 断言方法

JUnit 提供了一些常用的断言方法,用于验证测试结果是否符合预期。这些断言方法包括判断相等、不相等、为空、不为空、抛出异常等等。以下是一些常见的断言方法的示例:

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;public class AssertExample {@Testpublic void testAssertion() {Assertions.assertEquals(10, 5 + 5);Assertions.assertNotEquals(10, 5 + 3);Assertions.assertTrue(5 < 10);Assertions.assertFalse(5 > 10);Assertions.assertNull(null);Assertions.assertNotNull("Hello");Assertions.assertThrows(ArithmeticException.class, () -> {int result = 5 / 0;System.out.println(result);});}
}
6.4 测试套件

JUnit 还支持创建测试套件,用于将多个测试类组合到一个测试集合中,以便一次运行多个测试。以下是一个简单的测试套件的示例:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;@RunWith(Suite.class)
@Suite.SuiteClasses({CalculatorTest.class,StringUtilsTest.class
})
public class TestSuite {// This is a test suite class
}

总结

表单验证和数据校验对于保证系统的数据质量和安全非常重要。本文介绍了六个与表单验证和数据校验相关的Java库,包括 Hibernate Validator、Apache Commons Validator、jOOQ、Apache POI、Apache Commons Lang 和 JUnit。通过深入了解这些库的特点和使用方式,并通过详细的Java实例代码演示其用法,你可以更好地掌握这些库,为你的Java应用添加强大的表单验证和数据校验功能。

在实际的开发过程中,你可以根据具体的需求选择合适的库来处理表单验证和数据校验任务。使用这些库,你可以轻松地创建数据验证规则、进行数据格式校验以及处理各种表单验证场景。同时,你还可以使用 jOOQ 进行类型安全的 SQL 查询,使用 Apache POI 处理 Excel 文件,使用 Apache Commons Lang 进行字符串操作和类型转换,以及使用 JUnit 编写和执行单元测试。

希望本文能够帮助你更好地理解和应用表单验证与数据校验库,提高开发效率和代码质量。

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

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

相关文章

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture06 Logistic回归

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture06 Logistic回归 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data torch.tensor([[1.0],[2.0],[3.0]]) y_data torch.tensor([[0.0],[0.0],[1.0]])class LogisticRegressionModel(…

2.22 Qt day3 多界面跳转+qss登录界面优化+发布软件+对话框

思维导图&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号…

Linux系统运维:离线安装sar-性能监视和分析工具

目 录 一、前言 二、系统环境 三、安装sar &#xff08;一&#xff09;准备工作 1、下载 sar 工具的安装包&#xff1a; 2、将安装包传输到 CentOS 服务器 &#xff08;二&#xff09;安装工作 1、解压 2、配置安装 3、编译 4、安装 &#xff08;三&#xff0…

产品渲染3D效果图一张多少钱,哪个平台更有性价比?

产品渲染3D效果图的价格受到多方面因素的影响&#xff0c;包括但不限于产品类型、渲染难度以及输出尺寸等。如果效果图需要后期处理&#xff0c;还有可能增加其他费用。接下来&#xff0c;我们来了解一下产品渲染效果图的费用情况。 1.产品渲染3D效果图一张多少钱&#xff1f; …

邮件群发助力展会行业邀请函

在数字化时代&#xff0c;邮件群发邀请函成为展会行业获取参展商和观众的一项强有力的工具。通过巧妙的邮件营销策略&#xff0c;展会主办方能够在竞争激烈的市场中脱颖而出&#xff0c;吸引更多目标受众。U-Mail邮件群发将深入探讨邮件在展会行业的优势&#xff0c;并分享一些…

TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发

TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发 目录 TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发 一、TDesign Vue Next Starter中后台项目模板 1.1、项目…

[es6] symbol 是个啥东西,具体有什么用,有哪些应用场景,js内置的对于symbol 的应用有哪些

首先请看官网&#xff0c;然后明确下面几个基本知识点 Symbol 是 es6 提出&#xff0c;是基本数据类型typeof SymbolInstance symbol不支持 new 语法每个 Symbol() 返回的值都是唯一的可以作为对象的属性&#xff0c;且是唯一的属性有内置通用 symbol&#xff0c;可以使用属性…

ChatGPT在数据处理中的应用

ChatGPT在数据处理中的应用 今天的这篇文章&#xff0c;让我不断体会AI的强大&#xff0c;愿人类社会在AI的助力下走向更加灿烂辉煌的明天。 扫描下面二维码注册 ​ 数据处理是贯穿整个数据分析过程的关键步骤&#xff0c;主要是对数据进行各种操作&#xff0c;以达到最终的…

SpringBoot与MyBatisPlus整合常见‘XXXXMapper‘ that could not be found问题处理方式

SpringBoot与MyBatisPlus整合常见’XXXXMapper’ that could not be found问题处理方式 文章目录 1. 错误信息提示2. 问题排查与处理1. 检查application.yml配置是否正确1.Mybtis配置2. MyBatis-Plus配置 2. 检查主启动类标上注解是否正确3. 检测XXXMaper接口上的注解是否正确4…

算法| 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

977.有序数组的平方 简单题 /*** param {number[]} nums* return {number[]}*/ var sortedSquares function(nums) {const arr []for(let i 0; i < nums.length;i){arr[i] nums[i]*nums[i]}return arr.sort((a,b)> a-b) };209.长度最小的子数组 考察&#xff1a; 不…

Linux第62步_备份移植好的所有的文件和文件夹

1、备份“my-tfa”目录下所有的文件和文件夹 1)、打开终端 输入“ls回车”&#xff0c;列出当前目录下所有的文件和文件夹 输入“cd linux回车”&#xff0c;切换“linux”目录下 输入“ls回车”&#xff0c;列出当前目录下所有的文件和文件夹 输入“cd atk-mp1/回车”&am…

阿里云 短信服务——验证码盗刷与短信轰炸

阿里云 短信服务——验证码盗刷与短信轰炸 前言验证码盗刷与短信轰炸如果博主的文章对您有所帮助&#xff0c;可以评论、点赞、收藏&#xff0c;支持一下博主!!! 前言 最近在项目上使用到了阿里云的短信服务在忘记密码业务中发送短信验证码。 出于对于日后的业务安全的考虑需要…

Singularity 镜像管理工具的学习路线推荐,及学习建议

Singularity是一种流行的容器平台&#xff0c;专为科学计算和数据密集型工作负载设计。它允许用户在不同的计算环境中以一致、可重复的方式打包他们的应用程序及其依赖项。以下是一个推荐的学习路线&#xff0c;以及一些详细的学习建议&#xff0c;帮助你掌握Singularity。 初…

Linux下Apose由Word转PDF后乱码问题解决

Linux下Apose由Word转PDF后乱码问题解决 文章目录 Linux下Apose由Word转PDF后乱码问题解决1. 问题描述2. 问题原因3. 解决方法1. 拷贝Windows中的字体库2. 在Linux中安装字体库 4. 常见问题1. Ubuntu环境下使用如下命令安装&#xff1a;2. Centos环境下使用如下命令安装 1. 问题…

介绍一下浏览器的缓存(Expires, Cache-Control等)

浏览器的缓存是一种机制&#xff0c;用于存储网页和资源的副本&#xff0c;以便在之后的请求中能够更快地获取这些资源&#xff0c;而不是每次都从服务器重新下载。这不仅可以提高网页的加载速度&#xff0c;还可以减少服务器的负载和带宽的使用。 在HTTP协议中&#xff0c;有…

272.【华为OD机试真题】文件缓存系统(JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-文件缓存系统二.解题思路三.题解代码Python题解…

PCIe P2P DMA全景解读

温馨提醒&#xff1a;本文主要分为5个部分&#xff0c;总计4842字&#xff0c;需要时间较长&#xff0c;建议先收藏&#xff01; P2P DMA简介 P2P DMA软硬件支持 CXL P2P DMA原理差异 P2P DMA应用场景 P2P DMA技术挑战 一、P2P DMA简介 P2P DMA&#xff08;Peer-to-Peer…

发现了一个超赞的办公利器!ONLYOFFICE 文档 8.0 强势登场!

迎接 ONLYOFFICE 文档 v8.0发布后的全新升级&#xff01;现在&#xff0c;适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序更加强大&#xff01;全新的 RTL 界面、本地界面主题、与 Moodle 的集成等实用功能&#xff0c;让你的办公体验更加出色&#xff01;全新…

挑战30天学完Python:Day19 文件处理

&#x1f4d8; Day 19 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…

PyTorch中保存模型的两种方式

文章目录 一、状态字典&#xff08;State Dictionary&#xff09;二、序列化模型&#xff08;Serialized Model&#xff09;三、示例代码 一、状态字典&#xff08;State Dictionary&#xff09; 这种保存形式将模型的参数保存为一个字典&#xff0c;其中包含了所有模型的权重…