Java Hibernate验证程序:覆盖约束冲突消息传递
我编写了一个异常映射器来覆盖Hibernate Validator生成的响应,这样我就可以控制响应中返回的消息 我的问题是,我很难找到一种简单的方法来根据约束冲突的类型进行切换,因此,我在编写自定义消息时遇到了困难。理想情况下,我可以有一个基于注释的开关,并在响应中返回自定义消息。理想情况下,它看起来像这样:Java Hibernate验证程序:覆盖约束冲突消息传递,java,validation,bean-validation,hibernate-validator,Java,Validation,Bean Validation,Hibernate Validator,我编写了一个异常映射器来覆盖Hibernate Validator生成的响应,这样我就可以控制响应中返回的消息 我的问题是,我很难找到一种简单的方法来根据约束冲突的类型进行切换,因此,我在编写自定义消息时遇到了困难。理想情况下,我可以有一个基于注释的开关,并在响应中返回自定义消息。理想情况下,它看起来像这样: @Override public Response toResponse(ConstraintViolationException exception) { Constraint
@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!";
}
...
}
像这样简单的事情可能吗?ConstraintViolationgetConstraintDescriptor应该会对您有所帮助。除其他外,返回的描述符公开了违反的约束注释类型:
if ( violation.getConstraintDescriptor().getAnnotation().annotationType() == NotNull.class ) { ... }
也就是说,通过实现自定义MessageInterpolator可以更好地解决这个问题,它将立即在违反约束的情况下为您提供所需的消息。这不是一个很好的方法,如果您想将消息国际化怎么办?如果要沿着这条路走下去,请将带注释的消息作为一个键,并使用普通的消息包。查看开箱即用约束注释的默认值。我已经有了一个字符串文件来处理国际化。我简化了这个例子,所以这不是重点。这里我感兴趣的是选择正确消息的机制,而不是从何处检索消息。