对Rest,JSF,biz层使用相同的验证逻辑

时间:2015-02-19 08:19:47

标签: validation jsf java-ee jpa jax-rs

我想知道是否有一种方法,如果有,那么正确的方法是在EJB bean和Web服务中使用相同的验证逻辑(一个实现) - 休息(高枕无忧)。

目前Hibernate实体用于所有层,因为我认为我的项目太小而不能在表示层上使用其他DTO使其复杂化,但其余服务将使用DTO。

如何处理此问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

Java EE为此提供了JSR303 Bean Validation API。你可能已经见过它们,@NotNull和朋友。默认情况下,这是由JSF和JPA自动识别和支持的。 JAX-RS通常没有"视图"这应该采取/验证输入,因此它不相关。

所以,而不是像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>

另见: