在方法中使用@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) 的相关文章

  • 清理码头 - 删除“不必要”的东西

    我习惯用Jetty http jetty codehaus org jetty 作为我的网络容器 我对我做了什么安装步骤得到原始的焦油球并且清理一些目录和文件从中 我在这里想提出的是 您通常从 Jetty 中删除什么以在生产 登台环境中使用
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 无法捕获 Spring Batch 的 ItemWriter 中的异常

    我正在编写一个 Spring Batch 流程来将数据集从一个系统迁移到另一个系统 在这种情况下 这就像使用RowMapper实现在传递给查询之前从查询构建对象ItemWriter The ItemWriter称为save我的 DAO 上的
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • 全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