【问题标题】:When should be @ValidateOnExecution used with jersey?@ValidateOnExecution 什么时候应该与球衣一起使用?
【发布时间】:2015-07-29 19:09:33
【问题描述】:

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

根据 jersey 的文档,资源方法的约束是自动验证的。这段代码 sn-p 来自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 除了显式关闭验证之外还有什么用途?

【问题讨论】:

    标签: java validation rest jersey


    【解决方案1】:

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

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

    @Path("/")
    class MyResourceClass {
    
        @Email
        @ValidateOnExecution
        public String getEmail() {
            return email;
        }
        ...
    }
    

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

    因此,@ValidateOnExecution 至少也可以用于启用 getter 方法的验证。

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 2015-03-13
      • 2013-07-20
      • 2023-04-02
      • 2011-04-15
      • 2017-04-10
      • 2012-03-19
      • 2018-05-12
      相关资源
      最近更新 更多