我无法理解 @ValidateOnExecution 批注的本质。有人可以为它解释用例吗?
根据jersey的文档,对资源方法的约束将自动进行验证。该代码段来自jersey's example。
@GET
@NotNull
@HasId
public List<ContactCard> getContacts() {
return StorageService.findByName("");
}
@GET
@Path("{id}")
@NotNull(message = "{contact.does.not.exist}")
@HasId
public ContactCard getContact(
@DecimalMin(value = "0", message = "{contact.wrong.id}")
@PathParam("id") final Long id) {
return StorageService.get(id);
}
如果约束在pojo中,则可以使用@Valid(See)触发验证。
@Path("/")
class MyResourceClass {
@POST
@Consumes("application/xml")
public void registerUser(@Valid User user) {
...
}
}
那么@ValidateOnExecution的作用是什么,除了明确地关闭验证之外?
最佳答案
根据Jersey latest documentation,@ValidateOnExecution
注释应用于下一个目的:
根据Bean验证规范,默认情况下仅对所谓的受约束方法启用验证。 Java Beans规范定义的Getter方法不是受限方法,因此默认情况下不会对其进行验证。特殊注释@ValidateOnExecution可用于有选择地启用和禁用验证。例如,您可以对示例中显示的方法getEmail启用验证
@Path("/")
class MyResourceClass {
@Email
@ValidateOnExecution
public String getEmail() {
return email;
}
...
}
@ValidateOnExecution的type属性的默认值为IMPLICIT,这将导致对方法getEmail进行验证。
因此
@ValidateOnExecution
也至少可以用于启用对getter方法的验证。