使用 JHipster 生成新实体时,我添加了必需的字段,但我没有在前端应用程序的输入表单中显示它们。这些是后端应该填写的字段。为了说明这一点,请考虑一个假设的博客应用程序。我有一个 Post
实体,它有一个用 @NotNull
注释的字段 createdDate
。服务层负责设置保存实体时的当前日期。
当用户创建新帖子时,其字段将得到验证。尽管用户无法选择输入 createdDate
,但服务器会返回一个验证错误,指出 createdDate
不能为空。这是因为 Resource 类中的 @Valid
注释。同时,我不想从实体类中删除 @NotNull
注释,因为数据库中需要此字段。
然后我决定重新生成相同的实体,但这次我选择了 DTO 选项。现在我可以从 DTO 类的 createdDate
字段中删除 @NotNull
。我不再从 REST 层收到任何验证错误,DTO 映射到实体对象,并且在保存时,我添加当前日期。
我是否通过引入 DTO 和 Mapper 类来过度设计这个问题,或者这是一个合理的解决方案?
最佳答案
DTO 对于您的用例来说是一种很好的方法,无论您使用 MapStruct 生成的映射器还是手写的映射器,都取决于您的映射的复杂程度。
在 JHipster 中使用 DTO 的其他原因是:
- 根据用户角色隐藏一些数据
- 能够在不影响 REST API 的情况下发展您的实体
- 设置某些字段的格式
- 将多个实体的数据聚合到一个 DTO 中,以避免过多的请求(尤其是移动客户端)
关于rest - 不要使用 JHipster/Spring Boot 验证 REST 层中的某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40632712/