博客
关于我
JSR303自定义校验注解
阅读量:317 次
发布时间:2019-03-04

本文共 1733 字,大约阅读时间需要 5 分钟。

JSR303自定义校验注解:从零到hero

在数据校验领域,JSR303自定义校验注解是开发者不可或缺的利器。传统的正则表达式虽然强大,但在某些复杂场景下往往显得力不从心。因此,通过自定义校验注解,我们可以更灵活地满足业务需求。

自定义校验注解的必要性

当普通的正则校验无法覆盖业务需求时,自定义校验注解就显得尤为重要。一个典型的例子是对特定字段的取值范围进行严格控制。例如,showStatus字段可能只允许取值0或1,而不是传统的正则表达式无法精确约束这种情况。

自定义校验注解的实现步骤

第一步:编写自定义校验注解

我们需要创建一个类似于@NotNull的自定义注解。参考标准注解的实现,我们可以定义一个新的注解接口,并配置相关属性。

@Target(ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documented@Constraint(validatedBy = {ListValueConstraintValidator.class})public @interface ListValue {    String message() default "{com.atstudying.common.valid.ListValue.message}";    Class
[] groups() default {}; Class
[] payload() default {}; int[] vals() default {};}

这个注解接口配置了几个关键属性:

  • message():默认的错误信息,建议在ValidationMessages.properties中定义。
  • groups():用于分组校验,可以根据需求扩展。
  • payload():可选的额外载荷,可以根据具体需求使用。
  • vals():指定允许的取值数组。

第二步:编写自定义校验器

接下来,我们需要实现一个对应的校验器类,用于验证注解的约束条件。

public class ListValueConstraintValidator implements ConstraintValidator
{ private Set
allowedValues = new HashSet<>(); @Override public void initialize(ListValue constraintAnnotation) { int[] vals = constraintAnnotation.vals(); for (int val : vals) { allowedValues.add(val); } } @Override public boolean isValid(Integer value, ConstraintValidatorContext context) { return allowedValues.contains(value); }}

这个校验器类的主要职责是:

  • 在初始化时,根据注解获取允许的取值范围,并存储在集合中。
  • isValid方法中,检查输入值是否在允许范围内。
  • 第三步:关联校验器和注解

    在注解接口中,我们需要指定使用哪个校验器来执行约束检查。

    @Constraint(validatedBy = {ListValueConstraintValidator.class})

    通过这种方式,我们就完成了校验器与注解的关联。

    总结

    通过以上步骤,我们成功创建了一个自定义的校验注解,并实现了对特定字段取值范围的校验。这种方式不仅提升了校验逻辑的可维护性,还为业务需求的个性化配置提供了灵活的支持。

    转载地址:http://zzhq.baihongyu.com/

    你可能感兴趣的文章
    NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
    查看>>
    NVelocity标签使用详解
    查看>>
    nvidia-htop 使用教程
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    oauth2登录认证之SpringSecurity源码分析
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>