Cross field validation with Hibernate Validator (JSR 303)

前端 未结 15 1749
渐次进展
渐次进展 2020-11-22 02:37

Is there an implementation of (or third-party implementation for) cross field validation in Hibernate Validator 4.x? If not, what is the cleanest way to implement a cross fi

15条回答
  •  既然无缘
    2020-11-22 02:59

    With Hibernate Validator 4.1.0.Final I recommend using @ScriptAssert. Exceprt from its JavaDoc:

    Script expressions can be written in any scripting or expression language, for which a JSR 223 ("Scripting for the JavaTM Platform") compatible engine can be found on the classpath.

    Note: the evaluation is being performed by a scripting "engine" running in the Java VM, therefore on Java "server side", not on "client side" as stated in some comments.

    Example:

    @ScriptAssert(lang = "javascript", script = "_this.passVerify.equals(_this.pass)")
    public class MyBean {
      @Size(min=6, max=50)
      private String pass;
    
      private String passVerify;
    }
    

    or with shorter alias and null-safe:

    @ScriptAssert(lang = "javascript", alias = "_",
        script = "_.passVerify != null && _.passVerify.equals(_.pass)")
    public class MyBean {
      @Size(min=6, max=50)
      private String pass;
    
      private String passVerify;
    }
    

    or with Java 7+ null-safe Objects.equals():

    @ScriptAssert(lang = "javascript", script = "Objects.equals(_this.passVerify, _this.pass)")
    public class MyBean {
      @Size(min=6, max=50)
      private String pass;
    
      private String passVerify;
    }
    

    Nevertheless, there is nothing wrong with a custom class level validator @Matches solution.

提交回复
热议问题