【问题标题】:Mapping specific constraint validator to specific ContraintViolationException in Jersey将特定约束验证器映射到 Jersey 中的特定 ContraintViolationException
【发布时间】:2013-12-15 01:15:21
【问题描述】:

我正在尝试创建一个自定义验证器并将其映射到特定的 constraintViolationException。原因是我想为不同的约束创建不同的自定义异常。例如,如果在数据库中没有找到用户,则会触发 not found violationException,而如果用户的用户名无效,则会执行错误响应的 violationException。

@Retention(RUNTIME)
@Target({ FIELD, METHOD })
@Constraint(validatedBy = UserNotValidValidator.class)
public @interface UserIsValid { ... }

映射到

public class ConstraintExceptionMapper implements
    ExceptionMapper<ConstraintViolationException> {
   public Response toResponse(ConstraintViolationException e) { ... }
}

更具体地说,问题是bean hibernate验证器是否支持多约束异常映射器。

【问题讨论】:

标签: java hibernate jax-rs bean-validation jersey-2.0


【解决方案1】:

异常映射器是 JAX-RS 的概念,而不是 Bean 验证的概念。您应该为ConstraintViolationException 创建一个异常映射器,并让它根据给定违规异常中包含的违规创建不同的响应。例如。您可以通过`ConstraintViolation.getConstraintDescriptor().getAnnotation().annotationType() 检查违反的约束类型。

【讨论】:

  • 但是如果`ConstraintViolationException 中有太多(如果情况下)注释类型,维护代码不是很难吗?
  • 你能给我一个关于如何处理约束映射异常的建议/例子吗?我需要一个 for 循环来检查 annotationType(),在某些情况下,我想在 notfoundexception 之前抛出一个 badrequestexception,这不是一个干净的解决方案。
  • 我正在寻找并想知道是否有一些注释可以将特定的自定义约束映射到特定的自定义映射器。
  • 您可以定义一个元注释,用于标记自定义约束的不同类别。然后,您可以检索上述违反约束的注释类型,并通过读取元注释来检索类别;然后,您可以根据类别创建特定的响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多