代码之家  ›  专栏  ›  技术社区  ›  kernelpanic

JSR-303注释字段vs Getter

  •  7
  • kernelpanic  · 技术社区  · 8 年前

    当使用JSR-303注释执行bean验证时,注释字段和getter之间有什么区别?

    是否建议一种方法优于另一种方法?

    字段上的批注

    public class Person {
    
      @NotBlank
      private String firstName;
    
      public String getFirstName() {
        return firstName;
      }
    
      public String setFirstName(String firstName) {
        this.firstName = firstName;
      }
    }
    

    getter上的批注

    public class Person {
    
      private String firstName;
    
      @NotBlank
      public String getFirstName() {
        return firstName;
      }
    
      public String setFirstName(String firstName) {
        this.firstName = firstName;
      }
    }
    
    1 回复  |  直到 8 年前
        1
  •  12
  •   VPK    7 年前

    约束声明主要通过注释放置在类或接口上。约束注释( see Section 2.1, “Constraint annotation” ),可以应用于类型、类型的任何字段或任何符合JavaBeans的属性。

    在类上定义约束时,将验证的类实例传递给ConstraintValidator。在字段上定义约束时,字段的值将传递给ConstraintValidator。在getter上定义约束时,getter调用的结果将传递给ConstraintValidator。

    将约束放在(通常是公共的)getter上而不是放在(通常是私有的)字段上的最大优点是,约束是该类型公共API的一部分。它们甚至会添加到生成的JavaDoc中。类型的用户知道应用于它的约束的方式,而无需查看其内部实现。

    注释getter的另一个优点是,可以将约束放在基类或接口的方法上,也可以应用于任何子类型/实现。