JSR-303 Annotating Field vs Getter

时间:2018-01-10 04:13:22

标签: java annotations bean-validation

使用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 个答案:

答案 0 :(得分:4)

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

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

将约束放在(通常是公共的)getter而不是(通常是私有的)字段上的一大优点是约束是这种类型的公共API的一部分。它们甚至会被添加到生成的JavaDoc中。类型的用户知道哪种约束适用于它而不考虑其内部实现。

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