【问题标题】:JSR-303 Annotating Field vs GetterJSR-303 注释字段与 Getter
【发布时间】:2018-01-10 04:13:21
【问题描述】:

当使用 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;
  }
}

【问题讨论】:

    标签: java annotations bean-validation


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您的问题链接已损坏
    • @GabrielOshiro,谢谢! I 链接的重要内容已添加到答案中以确保解决方案可用,现在我已删除该链接。
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 2021-06-13
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2018-08-15
    相关资源
    最近更新 更多