当前位置: 首页 > 知识库问答 >
问题:

如何在没有框架的情况下通过Hibernate验证使用JavaBeans验证?

柴浩大
2023-03-14

我在JavaFX应用程序上通过hibernate-validation使用Java Beans验证,因此,没有框架来帮助连接。我将这些依赖项添加到我的项目中:

compile group: "org.hibernate", name: "hibernate-validator", version: "6.0.2.Final"
compile group: "org.glassfish", name: "javax.el", version: "3.0.1-b08"
compile group: "javax.validation", name: "validation-api", version: "2.0.0.Final"

我发现这可以使<code>modelObject</code>得到验证:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
validator.validate(modelObject);

我的问题是,每次验证时都创建一个新的工厂和验证器不好吗?我应该将它们缓存在某个地方并重复使用它们吗?验证器有多昂贵和多线程?

共有1个答案

孙修德
2023-03-14

根据javadoc说明,声明如下:

  • 引导进程构建的 ValidatorFactory 对象应该被缓存并在验证程序使用者之间共享。
  • 此类是线程安全的。

根据javadoc,从Validator开始,它的实现也应该是线程安全的

您已经用“Spring”标记了您的问题,因此简要说明如何正确使用javax.validation Spring。

首先,使用Spring<code>LocalValidatorFactoryBean</code>(如这里回答的示例),这将处理您正在寻找的必要缓存:

@Bean
public javax.validation.Validator localValidatorFactoryBean() {
   return new LocalValidatorFactoryBean();
}

其次,也使用Spring注入Validator实例:

@Autowired
private Validator validator;

您可以让Spring完成所有工作。例如,要使与验证相关的注释适用于方法,请定义

@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
    return new MethodValidationPostProcessor();
}

在您的Spring应用程序配置中,然后您将能够调用类似

public void myMethod(@Valid MyValidationAnnotatedType parameter){
    ...
}

public void anotherMethod(@Pattern(regex = "^[A-Za-z]+$") stringParameter) {
    ...
} 

更多细节请参考Spring文档

 类似资料:
  • 我的代码: }在这个特定的测试中没有失败,但是当我运行这个套件时,Mockito会告诉我不正确使用匹配器的情况。 我也可以做一些类似的事情:

  • 我需要将数据发布到REST接口,但是接收主机使用的是自签名证书(这一点不会改变),因此我需要忽略我收到的明显的证书验证错误。 我的初始脚本如下所示: 如前所述,这将生成以下StackTrace: 回溯(最近一次调用):文件“send_data.py”,第15行,在urlopen(post_it_早已,context=ctx)文件“c:\users\myusername\appdata\local\

  • 我有一个JWT安全令牌,需要通过jwksendpoint进行验证。jwks中的数据如下所示: 我尝试了一个第三方api,但它看起来依赖于x5c密钥,这在我的案例中不存在。 我的代码是: 如何在没有x5c的情况下通过jwks验证JWT?

  • “laravel/框架”:“5.7.*” “tymon/jwt认证”:“开发人员开发” 我正在尝试创建一个添加了自定义声明的JWT令牌,而不使用auth(这意味着我不希望从凭据创建令牌)。这是为了创建不需要登录的令牌,例如忘记/重置密码等。 使用Tymon/JWTAuth(https://github.com/tymondesigns/jwt-auth)由于最新的Laravel存在问题,因此建议加

  • 我有一个大的3D游戏,让玩家建立和创造有趣和巨大的世界,并保存到磁盘上的windows Phone7。 这款游戏使用了XNA,并且做了很多silverlight或SLXNA混合应用不支持的事情。 我想让玩家在那里备份,保存文件到他们的skydrive(最好)或dropbox,但经过一个多星期的努力,我得到了一些工作的暗示,我什么也没有... 似乎eather的每个示例都内置(并且需要)siverl

  • 注意:关于我最终得出的结论,请参阅问题底部的更新。 我需要通过发送请求消息的web套接字对请求发送多个响应,第一个响应快速发送,其他响应在数据验证后发送(大约10到60秒后,来自多个并行线程)。 我很难获得稍后的响应来停止在所有打开的web套接字上广播。如何让它们只发送到初始web套接字?或者我应该使用Spring STOMP之外的东西(因为,老实说,我只想将消息路由到各种功能,我不需要或不想广播