如何通过Java Validation Api自定义注解实现数据校验?

2026-05-21 13:102阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计496个文字,预计阅读时间需要2分钟。

如何通过Java Validation Api自定义注解实现数据校验?

背景+官方提供的注意事项可解决多数实际业务场景中的基本业务检验,但对于某些特殊场景,由于业务的复杂性,还需在入口处对输入进行多种角度的校验,以简化业务层的处理,降低业务复杂度。

背景

官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单Demo进行自定义注解校验的实现。

注解定义类

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; /** * @author wpp * @date 2020/8/22 14:30 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = PhoneCustomizeValidator.class) public @interface CustomizeValidator { String message() default "不是国内手机号"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }

注解方法处理类

import cn.hutool.core.util.StrUtil; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.regex.Pattern; /** * @author wpp * @date 2020/8/22 14:33 */ public class PhoneCustomizeValidator implements ConstraintValidator<CustomizeValidator, String> { private String phoneRegex = "^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$"; private Pattern phonePattern = Pattern.compile(phoneRegex); @Override public void initialize(CustomizeValidator constraintAnnotation) { } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (StrUtil.isBlank(value)) { return Boolean.FALSE; } return phonePattern.matcher(value).matches(); } }

使用方式

import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; import org.hibernate.validator.constraints.Length; /** * @author wpp * @date 2020/8/22 14:49 */ @Data @Builder public class CustomizeDTO { @ApiModelProperty(name = "phone", value = "手机号码") @Length(max = 13) private String phone; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

如何通过Java Validation Api自定义注解实现数据校验?

本文共计496个文字,预计阅读时间需要2分钟。

如何通过Java Validation Api自定义注解实现数据校验?

背景+官方提供的注意事项可解决多数实际业务场景中的基本业务检验,但对于某些特殊场景,由于业务的复杂性,还需在入口处对输入进行多种角度的校验,以简化业务层的处理,降低业务复杂度。

背景

官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单Demo进行自定义注解校验的实现。

注解定义类

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; /** * @author wpp * @date 2020/8/22 14:30 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = PhoneCustomizeValidator.class) public @interface CustomizeValidator { String message() default "不是国内手机号"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }

注解方法处理类

import cn.hutool.core.util.StrUtil; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.regex.Pattern; /** * @author wpp * @date 2020/8/22 14:33 */ public class PhoneCustomizeValidator implements ConstraintValidator<CustomizeValidator, String> { private String phoneRegex = "^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$"; private Pattern phonePattern = Pattern.compile(phoneRegex); @Override public void initialize(CustomizeValidator constraintAnnotation) { } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (StrUtil.isBlank(value)) { return Boolean.FALSE; } return phonePattern.matcher(value).matches(); } }

使用方式

import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; import org.hibernate.validator.constraints.Length; /** * @author wpp * @date 2020/8/22 14:49 */ @Data @Builder public class CustomizeDTO { @ApiModelProperty(name = "phone", value = "手机号码") @Length(max = 13) private String phone; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

如何通过Java Validation Api自定义注解实现数据校验?