Hibernate验证器:覆盖约束违规消息传递



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

我的问题是,我很难根据约束违规的类型找到一种简单的方法来"切换",因此,我很难编写自定义消息。理想情况下,我可以根据注释获得开关,并在响应中返回自定义消息传递。理想情况下,它看起来像这样:

@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!";
    }
    ...
}

可能很简单吗?

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

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

说,可以通过实施自定义MessageInterpolator来更好地解决问题,这将在约束违规中为您提供预期的消息。

最新更新