我编写了一个异常映射器来覆盖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!";
}
...
}
这样简单吗?
答案 0 :(得分:1)
ConstraintViolation#getConstraintDescriptor()
应该对您有所帮助。除此之外,返回的描述符公开违反的约束注释类型:
if ( violation.getConstraintDescriptor().getAnnotation().annotationType() == NotNull.class ) { ... }
话虽如此,通过实现自定义MessageInterpolator
可以更好地解决问题,它会立即在约束违规中为您提供预期的消息。