【问题标题】:Hibernate Validator: Overriding Constraint Violation MessagingHibernate Validator:覆盖约束冲突消息
【发布时间】:2016-12-02 01:36:18
【问题描述】:

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

    ...
}

这样简单的事情可能吗?

【问题讨论】:

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

标签: java validation bean-validation hibernate-validator


【解决方案1】:

ConstraintViolation#getConstraintDescriptor() 应该对你有帮助。除此之外,返回的描述符暴露了违反的约束注释类型:

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

话虽如此,通过实现自定义MessageInterpolator 可能会更好地解决该问题,这将立即在违反约束的情况下为您提供预期的消息。

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多