ConstraintViolationException - 提取导致异常的字段名称

时间:2016-04-22 19:00:12

标签: validation jax-rs hibernate-validator notnull

我正在使用带有JAX-RS服务的hibernate-validator来使用>>> evalState (traverse addNum [1..10]) 0 [1,3,6,10,15,21,28,36,45,55] 验证查询参数:

@NotNull

这可以按预期工作,如果@GET public Response doSomething(@NotNull @QueryParam("myParam") String myParam) {...} ConstraintViolationException则会引发myParam。我想提取与违规相关联的参数名称(例如null),并在响应消息中将其返回给客户端,但似乎没有明显的方法从异常中提取此。有人可以提供一些见解吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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