【问题标题】:ConstraintViolationException - extract field name which caused exceptionConstraintViolationException - 提取导致异常的字段名称
【发布时间】:2016-08-16 12:50:13
【问题描述】:

我正在使用带有 JAX-RS 服务的 hibernate-validator 来验证使用 @NotNull 的查询参数:

@GET
public Response doSomething(@NotNull @QueryParam("myParam") String myParam) {...}

如果myParamnull,这将按预期工作并抛出ConstraintViolationException。我想提取与违规相关的参数名称(例如myParam),并将其在响应消息中返回给客户端,但似乎没有一种明显的方法可以从异常中提取它。有人可以提供一些见解吗?

【问题讨论】:

    标签: validation jax-rs hibernate-validator notnull


    【解决方案1】:

    这仅在您使用 Java 8 时有效,因为在 Java 8 之前,实际参数名称在编译时丢失。它现在保留,假设您在 Java 8 上编译和运行。另请参阅 http://docs.jboss.org/hibernate/validator/5.2/reference/en-US/html_single/#_java_8_support

    【讨论】:

      【解决方案2】:

      从 BeanValidation 1.1 开始,有一个 ParameterNameProvider 合约可以使参数名称提取可配置。如另一个答案中所述,使用 Java 8,您可以在字节码中获取参数名称,前提是您使用 -parameters 标志进行编译。在这种情况下使用ReflectionParameterNameProvider。但是,即使使用 Java 7,您也可以获取参数名称,例如使用 ParanamerParameterNameProvider。此参数名称提供程序基于Paranamer,有多种设置方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-24
        • 1970-01-01
        • 2021-08-02
        • 2014-01-17
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多