在现代软件开发中,数据验证是确保应用程序健壮性和可靠性的关键环节。Java Bean Validation (JSR 380) 作为一个功能强大的规范,为我们提供了一套全面的注解工具集,这些注解能够帮助开发者在Java应用程序中以一种声明式的方式执行数据验证。从基本的非空验证到复杂的正则表达式匹配,JSR 380规范及其实现,如Hibernate Validator,都为我们提供了丰富的选项来满足各种验证需求。
肖哥弹架构 跟大家“弹弹” 常用框架注解应用,需要代码关注
欢迎 点赞,关注,评论。
关注公号Solomon肖哥弹架构获取更多精彩内容
历史热点文章
@NotNull
1.1 注解作用介绍
@NotNull
注解用于确保被注解的字段不为 null
。这在需要强制字段必须有值的情况下非常有用,例如,用户实体的用户名或电子邮件字段。
1.2 注解属性介绍
- message: 指定验证失败时返回的自定义错误消息。
- groups: 指定此约束所属的验证组,用于在不同的场景下应用不同的验证规则。
- payload: 允许注解携带额外的元数据,这些元数据可以在验证失败时由验证器使用。
1.3 注解业务案例
@NotBlank
2.1 注解作用介绍
@NotBlank
注解除了确保字符串不为 null
外,还检查字符串至少有一个非空白字符。这适用于需要文本输入的字段,如用户评论或表单提交。
2.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
- trim: 布尔值,默认为
true
,指示是否在验证前去除字符串两端的空白字符。
2.3 注解业务案例
@NotEmpty
3.1 注解作用介绍
@NotEmpty
注解用于验证字符串、集合或数组不为 null
且至少有一个元素(对于集合和数组)或至少有一个非空白字符(对于字符串)。
3.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
3.3 注解业务案例
@Size
4.1 注解作用介绍
@Size
注解用于验证字符串、集合、数组或Map的大小是否在指定的范围内。
4.2 注解属性介绍
- min: 指定最小大小。
- max: 指定最大大小。
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
4.3 注解业务案例
@Past
5.1 注解作用介绍
@Past
注解用于验证日期类型的字段是否表示过去的日期。
5.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
5.3 注解业务案例
@Future
6.1 注解作用介绍
@Future
注解用于验证日期类型的字段是否表示未来的日期。
6.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
6.3 注解业务案例
@Pattern
7.1 注解作用介绍
@Pattern
注解用于验证字符串是否与指定的正则表达式匹配。
7.2 注解属性介绍
- regexp: 指定的正则表达式。
- message: 自定义验证失败时的错误消息。
- flags: 正则表达式的匹配标志。
7.3 注解业务案例
@Min
8.1 注解作用介绍
@Min
注解用于验证数值类型的字段是否大于或等于指定的最小值。
8.2 注解属性介绍
- value: 指定的最小值。
- message: 自定义验证失败时的错误消息。
8.3 注解业务案例
@Max
9.1 注解作用介绍
@Max
注解用于验证数值类型的字段是否小于或等于指定的最大值。
9.2 注解属性介绍
- value: 指定的最大值。
- message: 自定义验证失败时的错误消息。
9.3 注解业务案例
@DecimalMin
10.1 注解作用介绍
@DecimalMin
注解用于验证 BigDecimal
或包装的数值类型字段是否大于或等于指定的十进制最小值。
10.2 注解属性介绍
- value: 指定的十进制最小值。
- inclusive: 布尔值,指示是否包含指定的边界值(默认为
true
)。 - message: 自定义验证失败时的错误消息。
10.3 注解业务案例
@DecimalMax
11.1 注解作用介绍
@DecimalMax
注解用于验证 BigDecimal
或包装的数值类型字段是否小于或等于指定的十进制最大值。
11.2 注解属性介绍
- value: 指定的十进制最小值。
- inclusive: 布尔值,指示是否包含指定的边界值(默认为
true
)。 - message: 自定义验证失败时的错误消息。
11.3 注解业务案例
12.1 注解作用介绍
@Email
注解用于验证字符串字段是否为有效的电子邮件地址。
12.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- regexp: 用于验证电子邮件地址的正则表达式(可选)。
12.3 注解业务案例
@Valid
13.1 注解作用介绍
@Valid
注解用于递归地对关联的对象或集合进行验证。
13.2 注解属性介绍
- groups: 指定嵌套对象应使用的验证组。
- payload: 额外数据。
13.3 注解业务案例
@Positive
14.1 注解作用介绍
@Positive
注解用于验证数值类型的字段是否严格大于 0。
14.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
14.3 注解业务案例
@PositiveOrZero
15.1 注解作用介绍
@PositiveOrZero
注解用于验证数值类型的字段是否大于或等于 0。
15.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
15.3 注解业务案例
@Negative
16.1 注解作用介绍
@Negative
注解用于验证数值类型的字段是否严格小于 0。
16.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
16.3 注解业务案例
@NegativeOrZero
17.1 注解作用介绍
@NegativeOrZero
注解用于验证数值类型的字段是否小于或等于 0。
17.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- groups: 指定验证组。
- payload: 额外数据。
17.3 注解业务案例
@Digits
18.1 注解作用介绍
@Digits
注解用于验证数值类型的字段是否符合指定的整数和小数位数。
18.2 注解属性介绍
- integer: 指定整数部分的最大位数。
- fraction: 指定小数部分的最大位数。
- message: 自定义验证失败时的错误消息。
18.3 注解业务案例
@PastOrPresent
19.1 注解作用介绍
@PastOrPresent
注解用于验证日期类型的字段是否表示现在或过去的日期。
19.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
19.3 注解业务案例
@FutureOrPresent
20.1 注解作用介绍
@FutureOrPresent
注解用于验证日期类型的字段是否表示现在或未来的日期。
20.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
20.3 注解业务案例
@Valid
21.1 注解作用介
@Valid
注解用于递归地验证关联的对象或集合中的元素。
21.2 注解属性介绍
- groups: 指定应应用于验证的组。
- payload: 指定应应用于验证的额外数据。
21.3 注解业务案例
@Validated
22.1 注解作用介绍
@Validated
注解用于指定验证时使用的验证组。
22.2 注解属性介绍
- groups: 指定应应用于验证的组。
22.3 注解业务案例
@ConvertGroup
23.1 注解作用介绍
@ConvertGroup
注解用于在验证过程中将一个分组转换为另一个分组。
23.2 注解属性介绍
- from: 指定原始分组。
- to: 指定目标分组。
23.3 注解业务案例
@ReportAsSingleViolation
24.1 注解作用介绍
@ReportAsSingleViolation
注解用于将验证过程中的所有违反约束的情况报告为单个验证错误。
24.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
24.3 注解业务案例
@Groups
25.1 注解作用介绍
@Groups
注解用于指定验证的分组,允许在不同场景下应用不同的验证规则。
25.2 注解属性介绍
- 无特定属性,通常与
@Valid
或@Validated
注解一起使用。
25.3 注解业务案例
@SafeHtml
26.1 注解作用介绍
@SafeHtml
注解用于验证HTML内容是否是安全的,防止跨站脚(XSS)攻。
26.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
26.3 注解业务案例
@EAN
27.1 注解作用介绍
@EAN
注解用于验证国际标准书号(ISBN)或欧洲商品编号(EAN-13)。
27.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
27.3 注解业务案例
@URL
28.1 注解作用介绍
虽然@URL
注解在JSR 380规范中没有定义,但Hibernate Validator提供了类似的功能,用于验证字符串是否是有效的URL格式。
28.2 注解属性介绍
- message: 自定义验证失败时的错误消息。
- protocol: 指定必须的协议(如http, https)。
- host: 指定必须的主机名。
- port: 指定端口号。
- regexp: 自定义的URL匹配正则表达式。
28.3 注解业务案例
注解验证综合性案例
场景描述
电商平台,用户可以浏览商品、下单购买,并进行订单管理。该平台需要验证用户信息、商品详情、订单数据以及支付信息的准确性和有效性。
业务实体和验证需求
- 用户信息(User):必须包含有效的电子邮件和非空的用户名。
- 商品详情(Product):需要有有效的库存数量和价格范围。
- 订单(Order):必须包含用户信息、商品列表,并且总金额必须为正数。
- 订单项(OrderItem):每个订单项需要验证购买数量和商品ID。
- 支付信息(PaymentInfo):需要验证支付金额是否正确,并且支付方式是否被接受。
在这个综合性业务场景中,我们使用了@NotNull
、@NotBlank
、@PositiveOrZero
、@DecimalMin
、@Positive
、@Email
等注解来确保数据的有效性。@Valid
注解用于递归验证嵌套对象,而自定义验证组(如UserChecks
、ProductChecks
等)允许我们在不同的场景下应用不同的验证规则。ErrorPayloads
类用于携带额外的元数据,这些元数据可以在验证失败时由验证器使用。
在线预订系统分组验证
场景描述
在线预订系统允许用户根据其类型(个人或公司)进行预订。系统需要对不同类型的预订应用不同的验证规则。
上述代码,Booking
类包含了根据不同预订类型(个人或公司)所需的不同字段,并使用相应的JSR 380注解进行了验证。BookingService
类中的processBooking
方法根据Booking
对象的类型使用分组验证,并处理验证结果。如果存在验证错误,它将抛出一个包含所有错误的IllegalArgumentException
异常。