java - RestEasy - 参数绑定(bind) - 验证和错误 - EJB

标签 java binding error-handling ejb resteasy

假设我用传递给 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 ) {
   }
 }

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

Spring 可以很好地完成所有这些工作。它具有您可以注入(inject)的 BindingResult 参数。 这里的等价物是什么?

有什么想法吗?

最佳答案

3.0.1.Final 之前的 RestEasy 版本

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

为了在 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 validator 将抛出 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.Final Validation Documentation

关于java - RestEasy - 参数绑定(bind) - 验证和错误 - EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435544/

相关文章:

php - 使用PHP的动态输入字段的错误消息

Java 一系列数字的平均值

java - 检测当前线程是否为 ExecutorService 线程

events - MVVM 绑定(bind)到 CLR 事件

c# - 在 WPF 中运行时 xml 文档更改时如何刷新 xmlDataProvider?

c# - 好的做法 - 抛出异常以满足函数返回

security - 如何隐藏向非Jenkins用户泄露的敏感数据

java - 如何构建一个动态查询,添加迄今为止的天数并使用条件 API 将该日期与另一个日期进行比较?

java - Oracle中如何使用setCharacterStream更新Clob?

wpf - 过多的数据绑定(bind)是否会使 WPF 应用程序变慢?有哪些可用的优化技术?