Spring Rest API验证应该在DTO中还是在实体中?

谢尔维斯基:

验证应该在哪个层中进行Spring Boot Rest API。我有一些模型,端点和DTO。我加了一些@NotNull@Size注释的DTO。我将@Valid注释与@RequestParam注释一起添加到了端点中

但是现在我想知道是否还要在@Entity类中添加验证吗?我觉得这将是重复的代码。但我读到,一个层永远不应依赖另一个层。

优点:

具有讽刺意味的是,有多少人真正相信验证应该是我们在控制器或他们与业务代码交换的价值对象中所参与的事情,而在其他任何地方都不必担心状态验证。

我们应始终努力在任何应用程序的多个阶段执行验证。

现在考虑一个控制器,该控制器接受您打算用来在某些服务中更改业务实体的值对象,并且该值对象仅包含您打算在较大的实体中操作的字段的子集。您可以在表示层中验证值对象,然后将其传递给您的服务,该服务将获取实体,从值对象中获取值并将其设置在适当的实体上。也许那个服务方法也可以操纵其他领域。

我们可以保证该实体的状态有效吗?

在验证值对象有效时,我们仅在提供的字段子集的上下文中验证了这些输入。我们没有验证这些值以及该实体的其他现有状态仍然有效。

尝试防止开发人员的错误也很重要。测试用例只有这么远,我们都可以同意我们不会验证测试中每个值组合的有效性。我们通常针对非常具体的案例和场景并从中得出结论。

通过不仅将验证应用于我们的表示值对象,还应用于我们的实体,您不仅使您的测试用例专注于广泛的功能验证,而且还确保了应用程序不会损害您的数据存储状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章