在方法中使用@AssertTrue时,该方法在验证期间被调用4次(Bean Validation)

2024-02-15

当使用bean验证来验证对象的状态时,用注释的方法@AssertTrue每当调用验证时都会调用 4 次。每次调用只应调用一次。

Hibernate 验证器版本:5.1.3.Final

这是一个例子:

对于以下类别的摩托车:

import javax.validation.constraints.AssertTrue;
class Motorcycle{
    private int fuel;
    private int tireDurability;

    @AssertTrue(message = "motorcycle.not.available.to.use")
    public boolean isAvailable(){
        return fuel > 0 && tireDurability > 0;
    }

    public void toUse(){...}
}

以及主要的:

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class Main{
    public static void main(String []args){
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        Set<ConstraintViolation<Motorcycle>> violations = validator.validate(new Motorcycle());

    }
}

When validator.validate(new Motorcycle())被调用,该方法isAvailable()被调用4次。

任何人都可以帮助我解决这种情况吗?这是一个错误吗?我该如何解决这个问题?


您应该尝试使用 Hibernate Validator 6.0.2.Final(它是当前最新的可用版本)。下一个测试确实通过了这个(最新)版本的验证器:

@Test
public void testMotorcycle() throws Exception {
    AtomicInteger count = new AtomicInteger( 0 );

    Motorcycle motorcycle = new Motorcycle( count );
    validator.validate( motorcycle );
    assertEquals( motorcycle.count.get(), 1 );
}

class Motorcycle {
    final AtomicInteger count;
    private int fuel;
    private int tireDurability;

    Motorcycle(AtomicInteger count) {
        this.count = count;
    }

    @AssertTrue(message = "motorcycle.not.available.to.use")
    public boolean isAvailable() {
        count.incrementAndGet();
        return fuel > 0 && tireDurability > 0;
    }

}

我也尝试用 5.1 运行它 - 并且它也通过了那里。您如何确定该方法被调用了 4 次?

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

在方法中使用@AssertTrue时,该方法在验证期间被调用4次(Bean Validation) 的相关文章

  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • Angular 5 表单验证(必需)不起作用

    我正在使用 TypeScript 学习 Angular 5 我对此完全陌生 我现在正在尝试构建一个表单并验证它 但它无法正常工作 这是我的组件 Component selector app login templateUrl login c
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr

随机推荐

  • 全8位加法器,非逻辑输出

    我创建了一个带全加器的 8 位加法器 正如您所看到的 我开始从右到左添加相应的位 对于 cin 信号 t1 和 t2 并按顺序 cout t2 和 t1 第一个 cin 设置为加法器输入 cin 我在实现中没有看到任何问题 但是当我运行它时
  • Office365 执行多个请求时出现“addFileAttachmentAsync”错误

    我遇到问题添加文件附件异步 我有 2 个数组 嵌入文件 包含将附加到正文中的文件名 和附件 包含将作为附件的文件名 我有2个for为每个数组运行循环 它们应该对数组中的每个文件向 Exchange Server 发出 GET 请求并获取二进
  • 在 iOS 中读取文本文件

    如何将文本文件读入textView 我有许多不同的文本文件 用户选择显示哪个 所以这就是为什么我不只是在其中有一个文件名 我真的很困惑为什么这不起作用 我在 Apple 开发者网站上有关从文件读取到字符串的部分中找到了它 NSString
  • PHPExcel图表不反转垂直轴

    我正在使用 PHPExcel 以便使用条形图导出 Excel 图表 我可以将默认布局的图表导出为下图 但是 我想将轴布局放在图表顶部并反转 Y 轴 如下图所示 我怎样才能做到这一点 研究代码后我发现它是possible反转轴 yAxis n
  • Alfresco 创建一个新用户组,仅允许创建用户和组

    我想创建一个新用户组 该用户组中的成员可以创建新用户和新组 我认为创建用户或组需要admin允许 该用户组除了创建 编辑 删除用户 组外 没有其他管理权限 alfresco社区4 0c中是否提供了这种群组 我该如何实施 如何添加具有指定权限
  • 邮政编码应使用什么 html5 表单属性?

    最好使用限制字符数的 文本 属性 还是可以在邮政编码的输入中使用数字属性 只是想了解 html5 中表单的所有不同属性 干杯 你可以试试这个
  • java中时间轴和线程有什么区别

    以下两个简单的片段执行相同的操作 打印 Hello world 每一秒 但它们之间有什么区别呢 什么时候应该使用线程 什么时候应该使用时间轴 Timeline 内部是否启动一个线程 如果没有 如何在不阻塞主线程的情况下每秒执行一次打印 Ti
  • Lucene.net 搜索引擎

    我有一个文件夹 里面有 20 个文本文件 我希望索引该文件夹并在这些文件中搜索任何关键字 我怎样才能在 C 中做到这一点 这是对 lucene Net 的一个很好的介绍 Lucene Net 简介 CodeProject http www
  • Selenium SendKeys() 与 Chromedriver 使用剪贴板内容而不是电子邮件地址中的“@”字符

    我正在尝试使用 C 中的 Selenium 和 ChromeDriver 将电子邮件地址写入输入字段 到目前为止还没有什么引人注目的事情 但对于包含 字符的字符串 它将发送剪贴板的内容而不是该字符 例如 剪贴板的内容是 MYCLIPBOAR
  • 如何在java中插入多个制表符字符串? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在Java中插入多个制表符字符串 这个例子 getName t t getLastName 不起作用 你的例子应该有效 但是没有理由单
  • 私有标识符仅在针对 ECMAScript 2015 及更高版本 (Angular 9) 时可用

    我正在从 Angular 8 2 升级到 9 1 并且我正在尝试将私有字段更改为 fieldName any在允许的情况下TS 3 8 https www typescriptlang org docs handbook release n
  • 休息模板 org.apache.http.NoHttpResponseException

    我有两个 Spring Boot 服务 A 和 B 还有一个外部服务 C 这是请求路径 Web 浏览器 服务 A 服务 B 外部服务 C 外部服务正在返回返回到前端的资源 对于 A B 和 C 之间的通信 我使用 Rest Template
  • Lion 10.7.3:Apple 目前不接受使用此版本操作系统构建的应用程序

    我在 Lion 10 7 2 上运行 Xcode 4 2 并且有一些应用程序需要更新到 Lion 沙箱 因此我可以将它们重新提交到 Mac App Store Mac 而不是 iOS 在此过程中 我弹出了一个更新到组合更新 10 7 3 的
  • Facebook lint 中的“无法获取作曲家模板数据”是什么意思?

    我在 Facebook 上创建了一个简单的原型应用程序 当我的测试脚本 Ubuntu 命令行上的 JavaScript 由 Node js 提供支持 尝试访问该应用程序时 它会生成以下错误消息 error message Invalid O
  • 没有时区信息的 Javascript ASP.net 日期格式 - 时区偏移

    我有一个客户端 JavaScript 可以在 JavaScript 中生成日期 new Date 2007 5 1 我需要将此日期传递到后面的代码可以访问的隐藏字段 我的问题是 当隐藏字段转换为 DotNet 日期时间时 时间不正确 这是因
  • 接口+扩展(mixin)与基类

    接口 扩展方法 mixin 比抽象类更好吗 如果你的答案是 这取决于 那么它取决于什么 我认为接口 扩展方法有两个可能的优点 接口是可多重继承的 而类则不能 您可以使用扩展方法以不间断的方式扩展接口 实现您的接口的客户端将获得您的新基本实现
  • 如何将socket.io与最新的mean.io一起使用?

    我已经获取了最新的 Mean io 的副本 并注意到与我之前使用的先前版本相比有相当多的变化 现在 我正在做的是创建一个非常基本的聊天应用程序 它使用套接字 io http socket io 有房间 按照套接字文档中的基本设置 我必须实现
  • 直接键访问和对象解构之间的性能

    下面最有效的代码是什么 Code 1 const type size props console log type Code 2 console log props type 我在一篇文章中读到 当您读取对象深处的键值对时 会对性能产生影响
  • PHP:如何跳过注释?

    好吧 如果我评论某些内容 它在所有语言中都会被跳过 但是它们是如何跳过的以及读取的内容是什么 Example This is commented out 现在 PHP 是读取整个注释以转到下一行还是只读取 该脚本被解析并分为tokens 实
  • 在方法中使用@AssertTrue时,该方法在验证期间被调用4次(Bean Validation)

    当使用bean验证来验证对象的状态时 用注释的方法 AssertTrue每当调用验证时都会调用 4 次 每次调用只应调用一次 Hibernate 验证器版本 5 1 3 Final 这是一个例子 对于以下类别的摩托车 import java