1

如果注释本身没有定义这样的消息模板,我将如何着手为约束(在 JPA 实体中)生成默认消息模板。

这就是我的意思。假设我有一个 JPA 实体“虚拟”:

@Entity
public class Dummy {
    @Column
    @NotNull
    Long id;
}

另外,假设我有一个 ValidationMessages.properties 文件,其中包含:

Dummy.id.NotNull=ID of dummy should not be null

现在,如果我将@NotNull 约束定义为@NotNull(message={Dummy.id.NotNull}) 一切都会很好,但是如果我想动态生成'{Dummy.id.NotNull}' 模板怎么办(使用反射)所以我不必在每个约束上编写相同的标准化模板?我使用 MessageInterpolator 类进行了尝试,但是只有在定义了 message 属性时才会调用插值方法,这违背了我想要做的事情的目的。

所以,为了让自己清楚,我如何让验证器询问我的代码块“嘿,在类 'Dummy' 中的字段 'id' 上的约束 'NotNull' 的消息是什么,即使它没有分配消息(或者更确切地说,它分配了默认消息)?”

4

1 回答 1

1

我错了——即使注释上没有定义明确的消息,也会调用 MessageInterpolator。这几乎回答了我的问题。剩下的唯一事情就是弄清楚如何获取正在验证的字段名称。

编辑:

最后,我被迫为在构造函数中传递字段名称的每个字段实现一个 MessageInterpolator 类,并在验证字段时使用该 MessageInterpolator 创建一个 Validator。我觉得这并不令人满意,但这是我能想到的唯一解决方案。

在这个注释中,我觉得很有趣的是,当可以访问注释实例时,无法追溯被注释的元素(无论是字段、方法、类还是参数)。如果这可能,我将能够动态获取字段名称,但这似乎是 Java 的“缺乏”,所以无能为力。

于 2015-07-15T07:35:28.207 回答