3

假设我用传递给 REST 调用的参数定义了一个 POJO

 class MyVO {
    @NotNull
    @PathParam("name")
    private String name;

    @NotNull
    @PathParam("age")
    private Integer age;
    // getters and setters
 }

 public class RESTclass {
   public postData( @Form MyVO vo ) {
   }
 }

它会自动绑定 MyVO 中的对象。但是我在哪里得到验证错误?它会在绑定期间触发验证吗?如果没有,如何触发验证?

Spring 在所有这些方面都做得很好。它具有您可以注入的 BindingResult 参数。这里的等价物是什么?

任何的想法?

4

1 回答 1

14

3.0.1.Final 之前的 RestEasy 版本

对于 bean 验证 1.0,Resteasy 有一个自定义验证提供程序,它在后台使用 hibernate 的 bean 验证器实现。

为了在 Resteasy 中启动和运行验证,您需要执行以下操作:

  1. resteasy-hibernatevalidator-provider依赖项添加到您的项目中。如果您使用的是 maven,这里是 maven pom 条目:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-hibernatevalidator-provider</artifactId>
        <version>${resteasy.version}</version>
    </dependency>
    
  2. 使用批注在您希望进行验证的资源类上进行@ValidateRequest批注。

    @Named 
    @Path("/users") 
    @ValidateRequest 
    public class UserResource extends BaseResource 
    {   
        @POST
        @Consumes({MediaType.APPLICATION_JSON})
        @Produces({MediaType.APPLICATION_JSON})
        public Response createUser(@Valid User user)
        {
            //Do Something Here
        }
    }
    

    Resteasy 将自动检测HibernateValidatorAdapter类路径上的 并开始调用 bean 验证。

  3. 创建一个ExceptionMapper<MethodConstraintViolationException>实现来处理验证错误。

    与 Spring 中您必须检查 BindingResult 不同,当在 Resteasy 中遇到验证错误时,hibernate 验证器将抛出一个MethodConstraintViolationException. 将MethodConstraintViolationException包含其中的所有验证错误。

    @Provider
    public class MethodConstraintViolationExceptionMapper extends MyBaseExceptionMapper
            implements ExceptionMapper<MethodConstraintViolationException>
    {
        @Override
        public Response toResponse(MethodConstraintViolationException exception) 
        {
            //Do Something with the errors here and create a response.
        }
    }
    

RestEasy 版本 3.0.1.Final

最新版本的 Resteasy 现在支持 bean 验证规范 1.1,并更改了 api 和抛出的异常。

  1. 而不是resteasy-hibernatevalidator-provider你将需要resteasy-validator-provider-11依赖项。

  2. 您不需要添加@ValidateRequest到资源类中,因为默认情况下使用 resteasy-validator-provider-11.

  3. 当检测到违规时,不会抛出一个,而是抛出MethodConstraintViolationException一个实例RESTEasyViolationException

文档: 3.0.1.最终验证文档

于 2013-07-03T06:33:54.953 回答