什么时候@ValidateOnExecution应该与泽西一起使用?

时间:2015-05-18 10:14:34

标签: java validation rest jersey

我无法理解 @ValidateOnExecution 注释的本质。有人可以为它解释用例吗?

根据球衣的文档,资源方法的约束会自动验证。此代码段来自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除了明确关闭验证之外用于什么?

1 个答案:

答案 0 :(得分:1)

根据Jersey latest documentation @ValidateOnExecution注释应该用于下一个目的:

  

根据Bean Validation规范,默认情况下仅对所谓的约束方法启用验证。 Java Bean规范定义的Getter方法不是受约束的方法,因此默认情况下不会对它们进行验证。特殊注释@ValidateOnExecution可用于有选择地启用和禁用验证。例如,您可以对示例

中显示的方法getEmail启用验证
@Path("/")
class MyResourceClass {

    @Email
    @ValidateOnExecution
    public String getEmail() {
        return email;
    }
    ...
}
  

@ValidateOnExecution的type属性的默认值是IMPLICIT,这会导致方法getEmail被验证。

因此,@ValidateOnExecution也可用于至少启用getter-methods的验证。