Java 关于验证的问题

Java 关于验证的问题,java,validation,bean-validation,hibernate-validator,Java,Validation,Bean Validation,Hibernate Validator,我认为这可能在其他地方得到回答,但在其他帖子的上下文中迷失了方向。所以,决定在这里重申。如果有人知道其他地方已经回答了这个问题,请告诉我这个方向。所以,我的问题 我看到了JSR-303、JSR-349和Hibernate验证器。有什么区别 在我看来,Hibernate验证器是JSR-303规范的参考实现,是真的吗 那么349是什么 如果Hibernate Validator是该规范的参考IML,那么该规范是否还有其他IML 现在我要找的是一些细节。我已经阅读了一些关于JSR-303的内容,并且大

我认为这可能在其他地方得到回答,但在其他帖子的上下文中迷失了方向。所以,决定在这里重申。如果有人知道其他地方已经回答了这个问题,请告诉我这个方向。所以,我的问题

  • 我看到了JSR-303、JSR-349和Hibernate验证器。有什么区别
  • 在我看来,Hibernate验证器是JSR-303规范的参考实现,是真的吗
  • 那么349是什么
  • 如果Hibernate Validator是该规范的参考IML,那么该规范是否还有其他IML
  • 现在我要找的是一些细节。我已经阅读了一些关于JSR-303的内容,并且大致了解了注释的工作原理。我的问题是,我可以动态更改约束值吗?以以下为例:

    public class Foo {
        @Min(value = 18, message = "Age must be greater than or equal to 18")
        @Max(value = 150, message = "Age must be less than or equal to 150")
        int fooAge;
    }
    
  • 那么,有没有一种方法可以使用规范在运行时提供年龄约束呢。所以,假设出于某种原因,在一个例子中,我需要最小值为20,最大值为100。在另一种情况下,我需要10和50,等等

    提前谢谢你帮我把这件事弄清楚

  • 303是Bean Validation 1.0的JSR。349是Bean Validation 1.1的JSR

  • 该项目的主页上说:“Hibernate Validator 5.x是参考实现Bean Validation 1.1!”

  • JSR定义了规范。Hibernate验证器是本规范的参考实现

  • 似乎不是:

  • 是的,您可以通过将约束指定给验证组并根据用例激活一个或另一个组来实现这一点。看


  • 就问题而言:

    如果Hibernate Validator是该规范的参考IML,那么该规范是否还有其他IML

    还有JSR-303->的apache实现。 不幸的是,最新发布的Apache BVal(0.5)版本不支持Bean验证1.1。它应该在以下版本中引入:ApacheBVAL(1.1.0)。现在有一个alpa快照版本:

    <dependency>
       <groupId>org.apache.bval</groupId>
       <artifactId>bval-jsr</artifactId>
       <version>1.1.0-alpha-SNAPSHOT</version>
    </dependency>
    
    
    org.apache.bval
    

    好的,我想了解更多关于我所寻找的是否可行的信息。给出了我原始问题中的代码示例。例如,是否可能有一种机制,通过该机制我可以从属性文件中读取约束,并在运行时将其注入到注释中?或者,我是否被编译时注释中定义的任何值和消息所困扰。在我的特殊情况下,我需要一种机制,能够根据使用系统的租户的需要将它们切换出去。注释只能具有常量参数。编写您自己的约束,使用您自己的验证器执行您想执行的任何操作。您还可以将约束外部化为XML配置。我不会使用注释,然后以某种方式尝试动态更改它们的配置。