我们正在使用带有Wildfly 10.0的java EE 7。在过去的几天里,我正在学习Java EE 7规范中包含的许多Bean验证功能。这听起来很有希望,因为我看到使用注释进行验证有许多优点,包括可重复性和更清晰的代码。
然而,javax.validation.Validator返回一组ConstraintViolations。
现在,ConstraintViolation附加了一条消息,您可以使用getMesssage()
从中获取该消息。消息的类型是String。
但是,对于我们的错误处理,我们使用我们创建的名为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<int, String>
添加到ConstraintViolation
的最简单方法是什么,这样它就可以用来将响应返回给客户端,而不会增加代码的复杂性。
我想在Hashmap<String, Pair<int, String>>
类中添加ErrorStrings
,并使用message
中定义的ConstraintViolation
作为关键字,但这会增加该类的复杂性因为当你想要改变或添加一些错误时你必须改变一对和一个hashmap。
我正在使用一个hibernate验证器,它是Jave EE的默认实现,但我愿意使用任何其他实现。我想知道最简单的方法,重新定义ConstraintViolation
,使其中包含Pair<int, String>
。
答案 0 :(得分:0)
最简单的&#34;我知道的方法是你应该创建自己的custom contraints,它会抛出自定义ConstraintViolation
实现,这也可能有public Pair<Integer, String> getMessagePair()
方法。但这会更复杂,因为它需要你重新实现你做的每一次验证。
就个人而言,我会在新的String
课程中从Pair<Integer, String>
到ErrorStringTranslator
进行翻译。这比你提到的解决方案更清晰,但不能避免任务的复杂性。