Hibernate Validator:覆盖约束违规消息

时间:2016-12-02 01:36:19

标签: java validation bean-validation hibernate-validator

我编写了一个异常映射器来覆盖Hibernate Validator生成的响应,因此我可以控制响应中的消息传递。

我的问题是,我很难找到一种基于约束违规类型“切换”的简单方法,因此,我在编写自定义消息时遇到了麻烦。理想情况下,我可以根据注释进行切换,并在响应中返回自定义消息。理想情况下,它看起来像这样:

@Override
public Response toResponse(ConstraintViolationException exception) {

    ConstraintViolation violation = exception.getConstraintViolations().iterator().next();

    String message = null;
    switch (violation.getType()) {
        case SomeEnum.NOT_NULL:
            message = "It's not null!";
            break;
        default:
            message = "Other message!";
    }

    ...
}

这样简单吗?

1 个答案:

答案 0 :(得分:1)

ConstraintViolation#getConstraintDescriptor()应该对您有所帮助。除此之外,返回的描述符公开违反的约束注释类型:

if ( violation.getConstraintDescriptor().getAnnotation().annotationType() == NotNull.class ) { ... }

话虽如此,通过实现自定义MessageInterpolator可以更好地解决问题,它会立即在约束违规中为您提供预期的消息。