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

时间:2016-03-27 22:25:48

标签: java spring validation spring-mvc

我的spring-boot项目需要一个用户管理服务。我一般都了解春天使用DTO(数据传输对象)。但是当我考虑设计服务时,我只使用多个DTO作为一个“用户”模型,例如UserDTO,RegisterUserDTO,UpdateUserDTO,ManagedUserDTO .. UserDTO就像一个只读数据(输出数据包含用户名,电子邮件,名称)用于显示用户信息。但RegisterUserDTO就像一个输入数据(带有密码,confirmPassword为新用户创建密码),用于用户注册表单。 UpdateUserDTO适用于管理员,因为管理员可以分配权限,启用或禁用用户。

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

我是否正确使用了大量的DTO?它应该像一个DTO一样使用多个弹簧验证器进行验证吗?

还有其他方法可以简化它吗?

1 个答案:

答案 0 :(得分:4)

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

  1. 使用不同的DTO可以在不同情况下为同一个User对象公开不同的相关信息
  2. 你不必处理一个"大班级"在验证中因为验证逻辑在不同的场景中是不同的。如果所有内容都在一个类中,那么您将遇到困难,特别是在验证中,因为某些字段不一定在给定的上下文中进行验证。另一方面,如果不小心,这可能会导致暴露不应暴露的值,例如。密码等。
  3. 允许尽可能使用继承。例如,正如您所提到的,UserDTO包含与任何用户相关的一般信息,而RegisterUserDTO可以继承UserDTO,而无需重复UserDTO和验证注释的属性。
  4. 除此之外,您还可以使用Spring's conversion service在不同的DTO之间进行转换,并且此转换完全与核心业务逻辑分离。我认为这不是一个优势,但只要有很多像这样的DTO,转换服务就会减少痛苦。