使用特定验证组将对象验证为RESTeasy方法

时间:2013-12-24 10:10:07

标签: resteasy bean-validation hibernate-validator

我正在尝试使用一个或多个特定验证组来验证REST方法的输入,但到目前为止,我一直无法弄清楚如何正确地执行它。我正在使用RESTeasy 3.X和Hibernate Validator 5.X。

我知道在Bean Validation 1.1规范之前,RESTeasy方法可以用以下内容注释:

 @ValidateRequest(groups=MyGroup.class)

但是,Hibernate Validator 5.X中不再存在此功能。

假设我有一个像:

这样的实体
 @Entity
 @Table(name = "example_table")
 @XmlRootElement
 public class ExampleEntity implements Mappable, Serializable
 {
     // ...

     @Column(name = "title")
     @NotEmpty(groups = Default.class, ExampleEntityGroup.class)
     @Size(max = 255)
     private String title;

     @Column(name = "description")
     @NotEmpty(groups = Default.class)
     @Size(max = 255)
     private String description;

     // ...
 }

现在我想定义一个REST PUT方法来更新这个实体,我希望“description”字段允许一个空值。为此,我想使用我定义的ExampleEntityGroup组验证实体(而Default组将用于验证创建新对象的POST请求。)

现在我的更新方法界面类似于:

 @Path("{id}")
 @PUT
 @Consumes(...)
 @Produces(...)
 ExampleEntity update(@PathParam("id"), ExampleEntity exampleEntity);

但是,如上所述,它将始终使用exampleEntity验证组验证Default。我该怎么做才能强制update()方法使用其他验证组?

我能找到的唯一与此类似的文档是example from the Bean Validation spec that uses an interceptor。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

带有Bean Validation 1.1的RestEasy 3将自动验证受约束的资源方法,即它足以将约束注释放置到资源方法参数或返回值,并且它将被验证。无法验证特定组,它始终是默认组。您可以尝试为RestEasy项目打开feature request