Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate验证程序:覆盖约束冲突消息传递_Java_Validation_Bean Validation_Hibernate Validator - Fatal编程技术网

Java Hibernate验证程序:覆盖约束冲突消息传递

Java Hibernate验证程序:覆盖约束冲突消息传递,java,validation,bean-validation,hibernate-validator,Java,Validation,Bean Validation,Hibernate Validator,我编写了一个异常映射器来覆盖Hibernate Validator生成的响应,这样我就可以控制响应中返回的消息 我的问题是,我很难找到一种简单的方法来根据约束冲突的类型进行切换,因此,我在编写自定义消息时遇到了困难。理想情况下,我可以有一个基于注释的开关,并在响应中返回自定义消息。理想情况下,它看起来像这样: @Override public Response toResponse(ConstraintViolationException exception) { Constraint

我编写了一个异常映射器来覆盖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!";
    }

    ...
}
像这样简单的事情可能吗?

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

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

也就是说,通过实现自定义MessageInterpolator可以更好地解决这个问题,它将立即在违反约束的情况下为您提供所需的消息。

这不是一个很好的方法,如果您想将消息国际化怎么办?如果要沿着这条路走下去,请将带注释的消息作为一个键,并使用普通的消息包。查看开箱即用约束注释的默认值。我已经有了一个字符串文件来处理国际化。我简化了这个例子,所以这不是重点。这里我感兴趣的是选择正确消息的机制,而不是从何处检索消息。