我想知道是否有一种方法,如果有,那么正确的方法是在EJB bean和Web服务中使用相同的验证逻辑(一个实现) - 休息(高枕无忧)。
目前Hibernate实体用于所有层,因为我认为我的项目太小而不能在表示层上使用其他DTO使其复杂化,但其余服务将使用DTO。
如何处理此问题?
谢谢!
答案 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>