【问题标题】:Redefine ConstraintViolation from hibernate validator从休眠验证器重新定义 ConstraintViolation
【发布时间】:2017-02-08 09:24:13
【问题描述】:

我们正在使用带有 Wildfly 10.0 的 java EE 7。在过去的几天里,我学习了很多包含在 Java EE 7 规范中的 Bean 验证功能。这听起来很有希望,因为我看到了使用注释进行验证的许多优势,包括可重用性和更简洁的代码。

但是 javax.validation.Validator 返回一组 ConstraintViolations。

现在,ConstraintViolation 附加了一条消息,您可以使用getMesssage() 从中获取。消息的类型是字符串。

但是,对于我们的错误处理,我们使用我们创建的称为 Pair<int, String> 的自定义类型来向客户端返回包含错误代码和消息的消息。

以下是我们的配对的示例:

public static final Pair<Integer, String> NAME_VALIDATION_ERROR = new Pair<Integer, String>(
            201,        "Name must contain only letters");

现在,这一切都在一个名为 ErrorStrings 的类中,它易于使用,因为该类包含静态方法,当您开始输入 ErrorStrings. 时,自动完成功能会为您提供可以使用的错误对的名称。例如NAME_VALIDATION_ERROR

那么,将Pair&lt;int, String&gt; 添加到ConstraintViolation 的最简单方法是什么,这样它就可以用于将响应返回给客户端,而不会增加代码的复杂性。

我想将Hashmap&lt;String, Pair&lt;int, String&gt;&gt; 添加到ErrorStrings 类,并使用ConstraintViolation 中定义的message 作为键,但这会增加该类的复杂性,因为您必须更改一对以及当您想要更改或添加一些错误时的哈希图。

我正在使用休眠验证器,它是 Jave EE 的默认实现,但我愿意使用任何其他实现。我想知道最简单的方法,重新定义ConstraintViolation,使其包含Pair&lt;int, String&gt;

【问题讨论】:

    标签: java hibernate validation jakarta-ee bean-validation


    【解决方案1】:

    我知道的“最简单”的方法是您应该创建自己的custom contraints,这将抛出自定义的ConstraintViolation 实现,它也可以有一个public Pair&lt;Integer, String&gt; getMessagePair() 方法。但这会更加复杂,因为它需要您重新实现您所做的每一个验证。

    我个人会在新的ErrorStringTranslator 类中将String 转换为Pair&lt;Integer, String&gt;。这比您提到的解决方案要干净一些,但不能使您摆脱任务的复杂性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多