对 Rest、JSF、业务层使用相同的验证逻辑

Using same validation logic for Rest, JSF, biz layer

我想知道是否有一种方法,如果有,正确的方法是在 EJB bean 中为 JSF 使用相同的验证逻辑(一个实现)和网络服务 - 休息(RestEasy)。

目前所有层都使用 Hibernate 实体,因为我觉得我的项目太小,无法在表示层上使用额外的 DTO 使其复杂化,但其余服务将使用 DTO。

我该如何解决这个问题?

谢谢!

Java EE 正是为此目的提供了 JSR303 Bean 验证 API。 @NotNull 和朋友们,您可能已经在附近见过他们了。默认情况下,这会被 JSF 和 JPA 自动识别和支持。 JAX-RS 通常没有应该 take/validate 输入的 "view",因此这里不相关。

所以,而不是例如JSF

<h:inputText value="#{bean.entity.property}" required="true" />

只有

private String property;

你可以直接使用

<h:inputText value="#{bean.entity.property}" />

@NotNull
private String property;

如果您通过 JAX-RS 放置数据,JPA 也可以使用它。

在 JSF 方面您唯一需要考虑的是它默认将空字段设置为空字符串而不是 null。您使用以下 web.xml 上下文参数告诉 JSF 将提交的空字符串值解释为 null:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

另请参阅: