Java 从hibernate验证器重新定义ConstraintViolation
我们将JavaEE7与Wildfly 10.0一起使用。在过去的几天里,我学习了JavaEE7规范中包含的许多Bean验证特性。这听起来很有希望,因为我看到了使用注释进行验证的许多优势,包括可重用性和更干净的代码 但是,javax.validation.Validator返回一组ConstraintViolations 现在,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()从中获取该消息。消息的类型是字符串 然而,对于我们的错误处理,我们使用一个我们创建的
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
。这是一个比您提到的更干净的解决方案,但并不能使您免于任务的复杂性