前言

        在日常做项目中,我们需要进行大量的参数校验操作,通过使用大量的 if 判断进行参数校验会导致代码的可读性存在问题。所以我们考虑引入Assert断言和Hibernate中的@Validator注解用于参数校验和参数约定。


Assert断言

        断言用于保证参数校验是否正确;若断言失败,程序会抛出IllegalArgumentException或IllegalStateException 异常,以此标识参数异常。

常用方法

  • notNull(Object,"message"):用于判断对象是否为 null 。

    • 若不满足条件,则抛出 IllegalArgumentException 。

  • hasLength(String,"message"):用于判断字符串非null且长度大于0。

    • 若不满足条件,则抛出 IllegalArgumentException 。

  • hasText(String,"message"):用于判断字符串是否包含非空白字符。

    • 若不满足条件,则抛出 IllegalArgumentException 。

  • isTrue(Boolean, "message"):用于判断参数是否为true。

    • 若为false,则抛出 IllegalSateException 。

  • doesNotContain(String,String,"message"):用于判断是否第一个字符串内是否包含第二个字符串。

    • 若不满足条件,则抛出 IllegalArgumentException 。

使用场景

  • 利用断言进行单元测试,断言的主要作用场景。

  • 自定义断言,用于简化系统中的参数校验。

    • 为什么要实现自定义断言:因为一般情况下,如果存在问题,我们希望可以让抛出的异常更加具体且可分辨,我们一般情况下会在项目中进行自定义异常。通过自定义断言的方式,我们可以将参数校验的通过自定义断言进行简化判断的同时可以让我们自定义的异常得到使用,提高了代码的复用性和可维护性。


Jakarta Validation

        用于在Java中实现数据验证的标准框架,通过注解的形式来验证数据是否符合约定。

        其中,在jakarta.validation.constratints下提供了一系列内置注解,简化开发。

常用注解

  • @NotNull:值不能为null。

  • @NotBlank:字符串不能为null且长度大于0。

  • @NotEmpty:不能为空。

  • @Size:长度或大小在指定范围。

  • @Max/Min:最大/最小值。

  • @Email:校验邮箱格式。

  • @Pattern:正则表达式匹配。

  • @Positive:参数必须为整数。

  • @Future/Past:日期正在将来/过去。

  • @Valid:开启校验。

使用方式

  1. 引入maven。

<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>3.0.2</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.1.Final</version>
</dependency>
  1. 数据模型进行注释约定。

public class UserDTO {
    @NotNull(message = "ID不能为空")
    private Long id;
    @Email(message = "邮箱格式不正确")
    private String email;
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式错误")
    private String phone;
}

使用场景

  • 在项目进行实体类定义后,我们应该通过使用该方式,进行参数校验,保证数据合法。


总结

  • 当我们进行测试的时候,合理使用Assert关键字进行断言,方便测试。

  • 通过自定义断言的方式进行参数校验,简化项目中的参数校验方式。

  • 通过使用jakarta.validation.constratints内置注解,用于约定参数进行校验,保证数据合法。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐