当前位置: 首页 > 知识库问答 >
问题:

Spring验证:多个DTO vs具有多个验证器的单个DTO

东方栋
2023-03-14

我需要一个用户管理服务为我的Spring启动项目。我一般了解DTO(数据传输对象)在Spring的使用。但是当我考虑设计服务时,我只对一个“用户”模型使用多个DTO,如UserDTO、注册用户DTO、更新用户DTO、管理用户DTO...UserDTO就像一个只读数据(带有用户名、电子邮件、姓名的输出数据),用于显示用户信息。但是注册用户DTO就像一个输入数据(带密码,确认密码为新用户创建密码),用于用户注册表单。UpdateUserDTO适用于管理员,因为管理员可以分配权限,启用或禁用用户。

另一个原因可能是因为验证,所以不同的hibernate注释验证器可以应用于不同的DTO。

我在使用大量DTO方面做得对吗?通过使用多个Spring验证器进行验证,是否应该像一个DTO一样?

有没有其他方法可以简化它?

共有1个答案

严宇
2023-03-14

在我看来,具有多个DTO是有效的,并导致更清晰的逻辑。

  1. 拥有不同的DTO允许在不同的情况下为同一用户对象公开不同的相关信息
  2. 您不必在验证中处理一个“大类”,因为验证逻辑在不同的场景中是不同的。如果所有内容都在一个类中,您将很难进行验证,特别是在验证中,因为某些字段不一定要在给定的上下文中进行验证。另一方面,如果不小心,这可能会导致暴露不应暴露的值,例如密码等。
  3. 允许尽可能使用继承。例如,如您所述,UserDTO包含有关任何用户的一般信息,RegisterUserDTO可以继承UserDTO,而无需重复UserDTO的属性和验证注释

除此之外,您还可以使用Spring的转换服务在不同的DTO之间进行转换,这种转换与核心业务逻辑完全解耦。我不认为这是一个优势,但是当有很多这样的DTO时,转换服务会让它不那么痛苦。

 类似资料:
  • 因此,我有一个包含许多的表单,它们都需要填写。我研究了文本框验证,但我只能找到验证单个文本框的说明。下面是单数文本框验证的代码。我只是想知道是否有可能同时打击所有的人,而不是每个人都这样。任何帮助都将不胜感激!

  • 我刚刚开始使用Apache Flink进行流处理,我收到的Json流如下所示: 并被问到我是否可以履行以下业务规则: > 如果在过去10秒内此IP的令牌数>5,则拒绝 在另一个类中,我将对规则进行所有的逻辑操作,我将计算IP地址出现的次数,如果它超过了时间窗口中允许的次数,我将返回一条包含一些信息的消息: ruleMaker.java 到目前为止,我认为这段代码是有效的,但我对Apache Fli

  • 问题内容: 这里有一个贪婪的小问题,希望这个问题也可以帮助其他想更多地了解注释验证的人 我目前正在学习Spring,现在,我计划尝试自定义带注释的验证。 我已经进行了很多搜索,现在我知道主要有两种验证,一种用于控制器,另一种是使用@Valid的注释方法 所以这是我的情况:假设我有两个或多个字段,当它们均为ALL NULL时可以为null。但是,只有当这些字段之一包含空字符串以外的任何值时,才要求这

  • 我们希望将我们的swagger规范拆分为两个文件。一个包含endpoint,一个包含类型定义,因为类型定义用于多个项目,我们希望避免在多个源位置修复某些内容。 我们使用maven codegen插件来生成模型和api,它可以很好地进行拆分。 但是,请求验证不会,因为它无法遵循对它所显示的类型定义的外部引用。 我们使用swagger-request-validator-spring MVC进行请求验

  • 我无法使用我拥有的多个数据库表: Input:User(表格用户)Input field:Email(表格用户)Input:Bookingnumber(表格Bookingnumber) 仅使用“用户”表单的输入字段有效,从其他表添加预订号会引发此错误: 问题类似于如何使用Spring和hiberNate将值插入多个表 spring错误中验证器的无效目标? 我只有两种形式,一种输出,只显示db数据,

  • 我如何验证一个列表的值跨字段,其中至少一个单一的值必须设置(不是零) 我需要验证至少有一个字段被输入(例如总数不是零) 我遇到的问题是,当任何一个字段发生更改时,validator::total_cost不会重新评估所有正在验证的字段。 在“任意”输入中键入正确的值需要告诉“所有”其他输入,以便根据新的计算字段重新估价! 任何帮助都将不胜感激。 (我的电视机大得多) 我正在使用的标记 AnyVal