我写了一个异常映射器,以覆盖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
来更好地解决问题,这将在约束违规中为您提供预期的消息。