Java 从hibernate验证器重新定义ConstraintViolation

Java 从hibernate验证器重新定义ConstraintViolation,java,hibernate,validation,jakarta-ee,bean-validation,Java,Hibernate,Validation,Jakarta Ee,Bean Validation,我们将JavaEE7与Wildfly 10.0一起使用。在过去的几天里,我学习了JavaEE7规范中包含的许多Bean验证特性。这听起来很有希望,因为我看到了使用注释进行验证的许多优势,包括可重用性和更干净的代码 但是,javax.validation.Validator返回一组ConstraintViolations 现在,ConstraintViolation附带了一条消息,您可以使用getMessage()从中获取该消息。消息的类型是字符串 然而,对于我们的错误处理,我们使用一个我们创建的

我们将JavaEE7与Wildfly 10.0一起使用。在过去的几天里,我学习了JavaEE7规范中包含的许多Bean验证特性。这听起来很有希望,因为我看到了使用注释进行验证的许多优势,包括可重用性和更干净的代码

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

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

然而,对于我们的错误处理,我们使用一个我们创建的称为
对的自定义类型来向客户端返回消息,包括错误代码和消息

下面是一个示例,展示了我们的配对:

public static final Pair<Integer, String> NAME_VALIDATION_ERROR = new Pair<Integer, String>(
            201,        "Name must contain only letters");
公共静态最终对名称\u验证\u错误=新对(
201,“名称必须仅包含字母”);
现在,这些都在一个名为ErrorStrings的类中,使用起来很简单,因为该类包含静态方法,并且当您开始键入
ErrorStrings时。
autocomplete会为您提供可以使用的错误对的名称。例如
NAME\u VALIDATION\u ERROR

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

我认为应该向
ErrorStrings
类添加
Hashmap
,并使用
ConstraintViolation
中定义的
消息
作为密钥,但这会增加该类的复杂性,因为当您想要更改或添加错误时,必须更改一对Hashmap

我使用的是hibernate验证器,这是Jave EE的默认实现,但我愿意使用任何其他实现。我想知道最简单的方法,重新定义
ConstraintViolation
,使其包含
Pair

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

我个人会在一个新的
ErrorStringTranslator
类中将
String
翻译成
Pair
。这是一个比您提到的更干净的解决方案,但并不能使您免于任务的复杂性