JSR303 复合注释

2023-12-07

我创建了一个由 @Digits 和 @Min 组成的复合注释

@Digits(integer=12, fraction=0)
@Min(value=0)
@ReportAsSingleViolation
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target( { FIELD, METHOD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Constraint(validatedBy={})
public @interface PositiveInt {
     String message() default "{positive.int.msg}";
     Class<?>[] groups() default {};
     Class<? extends Payload>[] payload() default {};
}

我的问题是,我想重用此注释,在使用 PositiveInteger 时指定 @Digits 'integer' 值

example

public Demo{
    @PositiveInteger(integer=1)
    private Integer num1;

    @PositiveInteger(integer=2)
    private Integer num2;
}

其中 num1 可以是 1-9,num2 可以是 1-99。

这是否可能,如果可以,我该怎么做?

目前,我必须提供一个自定义 ConstraintValidator,其中我将拥有 @Digits 和 @Min 的验证代码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target( { FIELD, ANNOTATION_TYPE, PARAMETER })
@Constraint(validatedBy=PositiveIntConstraintValidator.class)
public @interface PositiveInt {
         String message() default "positive.int.msg";
     Class<?>[] groups() default {};
     Class<? extends Payload>[] payload() default {};

     int integer() default 1;
}


public class PositiveIntConstraintValidator implements ConstraintValidator<PositiveInt, Number> {
    private int maxDigits;

    @Override
    public void initialize(PositiveInt constraintAnnotation) {
    maxDigits = constraintAnnotation.integer();

    if (maxDigits < 1){
        throw new IllegalArgumentException("Invalid max size.  Max size must be a positive integer greater than 1");
    }
}


@Override
public boolean isValid(Number value, ConstraintValidatorContext context) {
    if (value == null){
        return true;
    }
    else if (value instanceof Long || value instanceof Integer || value instanceof Short || value instanceof BigInteger){
        String regex = "\\d{"0," + maxDigits + "}";
        return Pattern.matches(regex, value.toString());
    }
    return false;
}

你可以利用@OverridesAnnotation:

@Digits(integer=0, fraction=0)
@Min(value=0)
@ReportAsSingleViolation
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target( { FIELD, METHOD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Constraint(validatedBy={})
public @interface PositiveInteger {
    String message() default "{positive.int.msg}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

    @OverridesAttribute(constraint=Digits.class, name="integer")
    int digits();
}

这样给出的值@PositiveInteger#digits()将被传播到@Digits.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSR303 复合注释 的相关文章

随机推荐

  • 使用 Python 以无密码的用户身份登录 Windows

    我这里有一个情况 使用Python 我创建了一个进程 以系统或管理员用户身份运行 并且我需要使用不同的用户名 无需密码 调用应用程序 因此 阅读下面的链接 结论是可能的 使用 Kerberos 模拟另一个没有密码的用户 但我没有找到任何用
  • Crosswalk 从 JavaScript 调用 Java 方法

    我现在正在走人行横道 当用户单击 HTML 中的按钮时 我需要调用 Java 方法 该方法可能如下所示 a href Start a 我不确定是否人行横道延长线就是我想要的 仅仅为了调用Java函数似乎就很重了 有没有更简单的方法来做到这一
  • 在 SQLite 错误中插入多行(错误代码 = 1)

    在 SQLite Android 中执行以下查询时出现错误 sDataBase execSQL query 插入联系人 ID 名字 姓氏 电话号码 电子邮件 ID 状态 值 ae0caa6a 8ff6 d63f 0253 110b20ac2
  • 如何在具有设定名称的文件夹中列出谷歌驱动器中的所有文件?

    我的驱动器中有一个文件夹 其中包含多个 客户端 文件夹 每个客户端文件夹都具有相同的结构 其中包括一个包含已完成发票 称为 已完成发票 的文件夹 我需要一种方法来遍历所有名为 Completed Invoices 的文件夹 并在 Googl
  • 将 Codeigniter 3 应用于新域名主机会导致 session_files_drive.php 出现 mkdir() 错误

    我有一个 Codeigniter 框架设置 我将其跨多个域设置作为默认起点 它给了我以下错误 当我添加全新安装的 CI3 并添加数据库信息以及以下自动加载时 情况是一样的 autoload libraries array database
  • 理解python中的执行流程

    对于 python 新手 对执行流程感到困惑 为了详细说明 我陈述以下示例 示例1 def hello print hello world python def python print testing main if name main
  • 自动检测/转换数据类型?

    numpy中是否有一个函数可以确定字符串应该是整数还是浮点数并自动转换它们 例如 我经常有一个记录集合 这些记录是使用以下组合从文本文件中解析出来的 str strip and str split 然后我得到类似的东西 List 1 a 3
  • .NET Core 中的日期时间精度

    跟随埃里克 利珀特的post多年前的精确度DateTime 我在装有 Windows 10 的同一台计算机上在 net core 和 NET Framework 4 5 2 上运行了他的测试 var n 1000 int i 0 long
  • pandas 数据帧散点图中的 Matplotlib 图例

    I am trying to get the legend right on the figure below It should be just green blue and red with the corresponding colo
  • InflateException:二进制 XML 文件行 #1:由于 OutOfMemoryError 导致类 膨胀时出错

    这是我的代码 输入 xml 布局文件夹
  • 为什么十六进制字节数据 b'\x35' 在 Python 中被解释为 b'5'?

    我正在处理一组十六进制数据 我使用字节类型作为数据 例如 我的数据为b x35 b xA6 b x12 b x26 当我打印每个十六进制字符时 我得到的输出为b 5 b xa6 b x12 b 相应地 我正进入 状态b xa6 b x12
  • jQuery:tablesorter 插件,禁用某些列的排序

    我正在尝试禁用 3 列表中一列的排序 根据文档我想出了这个 table sortable tablesorter sortList 0 0 0 0 0 0 textExtraction myTextExtraction headers 0
  • MapReduce问题

    我有一个奇怪的 MapReduce 问题 地图功能 gt mp function emit this ContractID qty this Qty qtybs this QtyBs 减少功能 gt red function key val
  • Swift 中的“advancedBy”不可用

    我不确定如何解决上述错误消息 我尝试将其转换为索引 但它似乎不接受字符串 我不知道如何advancedBy也有效 非常感谢帮助 在斯威夫特 3 中 advancedBy 已更名为advanced by Int 此外 substringWit
  • 会话超时后自动重定向到登录

    我试图在会话超时后自动重定向到我的登录页面 我尝试在我的 Main Master 页面中添加此代码 所有其他页面都连接到此母版页 protected void Page Load object sender EventArgs e Redi
  • WCF中服务应用的架构

    我需要一些有关 WCF 应用程序架构的帮助 这将是许多应该可用于服务许多不同客户的服务 例如 ASP Net 应用程序 JavaScript 和 或 Silverlight iPhone 视窗手机 Android 有些服务需要身份验证 有些
  • 总结为每组赋予相同的值

    使用代码获取每个物种的平均花瓣长度 group sp lt group by iris iris Species mean plength lt summarise group sp mean iris Petal Length mean
  • Spring MVC Java 配置

    我想从 Spring Web 应用程序设置一个简单的响应主体 我的问题很简单 就是出现网络错误 我的 POM xml 是
  • SQL Server 数据库项目构建期间使用错误的编译器

    我在使用 Visual Studio 2015 编译 SSDT SQL Server 数据库项目时遇到问题 我想在我的数据库项目中使用 C 6 功能 但它似乎不受支持 例如 我在我的数据库项目中添加了下一个类 namespace Datab
  • JSR303 复合注释

    我创建了一个由 Digits 和 Min 组成的复合注释 Digits integer 12 fraction 0 Min value 0 ReportAsSingleViolation Documented Retention Reten