JSR-303 注释字段与 Getter
JSR-303 Annotating Field vs Getter
使用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;
}
}
约束声明主要通过注释放置在classes 或接口上。约束注释 (see Section 2.1, “Constraint annotation”) 可以应用于类型、任何类型的字段或任何符合 JavaBeans 的属性。
当在 class 上定义约束时,正在验证的 class 实例将传递给 ConstraintValidator。当在字段上定义约束时,字段的值将传递给 ConstraintValidator。当在 getter 上定义约束时,getter 调用的结果将传递给 ConstraintValidator。
对(通常是 public)getter 字段而不是(通常是私有的)字段施加约束的最大优点是约束是类型 public API 那样。它们甚至会被添加到生成的 JavaDoc 中。一个类型的用户知道哪些约束适用于它,而无需查看其内部实现。
注释 getter 的另一个优点是约束可以放在基础 classes 或接口的方法上,也适用于任何 sub-types/implementations.
使用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;
}
}
约束声明主要通过注释放置在classes 或接口上。约束注释 (see Section 2.1, “Constraint annotation”) 可以应用于类型、任何类型的字段或任何符合 JavaBeans 的属性。
当在 class 上定义约束时,正在验证的 class 实例将传递给 ConstraintValidator。当在字段上定义约束时,字段的值将传递给 ConstraintValidator。当在 getter 上定义约束时,getter 调用的结果将传递给 ConstraintValidator。
对(通常是 public)getter 字段而不是(通常是私有的)字段施加约束的最大优点是约束是类型 public API 那样。它们甚至会被添加到生成的 JavaDoc 中。一个类型的用户知道哪些约束适用于它,而无需查看其内部实现。
注释 getter 的另一个优点是约束可以放在基础 classes 或接口的方法上,也适用于任何 sub-types/implementations.