从配置中注入 DTO 的默认值

Posted

技术标签:

【中文标题】从配置中注入 DTO 的默认值【英文标题】:Inject default values in DTO from configuration 【发布时间】:2020-09-02 23:35:23 【问题描述】:

目前,我在控制器中使用 DTO 对象,并将它们与 class-validator 插件配对以解析/验证它们。问题是,我想为某些 DTO 参数分配默认值,但这些值应该来自配置。我需要一些优雅的方法来将这些默认值注入 DTO,并让这些默认值自动填充到各个端点的 swagger 元信息中(我正在使用 nest swagger 插件为我自动应用装饰器)。为了达到预期的结果,我看到了 2 个解决方案,这两个解决方案都需要一些不必要的妥协。

解决方案 1: 将配置值注入控制器本身,并在路由处理程序中解析 DTO 后,将参数和 DTO 传递给将在 DTO 上应用它们的方法。但是,为了在 swagger 中记录默认值,我应该手动将“@ApiQuery”属性放在默认值的处理程序上。首先,在这种情况下,我同时使用 DTO 和查询装饰器来专门用于招摇,而且我不确定这是否会起作用。简而言之,这完全是一团糟,我更愿意避免这种“解决方案”。

解决方案 2: 完全跳过 DTO 方法并使用单独的查询参数。我可以通过将配置注入控制器来使用默认管道应用默认值。但是,我需要为每个参数应用验证规则或创建一个 DTO,我可以在其上应用验证规则并从查询参数手动构造它。另外,我需要手动记录所有参数以供 swagger 拾取。

有更好的解决方案吗?

【问题讨论】:

【参考方案1】:

您可以像这样在您的 Dto 中直接在 ApiProperty 装饰器中传递默认值...

@ApiProperty( default: 'https://www.youtube.com/watch?v=CjG8u6ZZpag' )
@IsString()
@IsNotEmpty()
readonly keyName: string;

【讨论】:

【参考方案2】:

您可以从拦截器传递默认值并从配置文件中导入默认数据。

【讨论】:

以上是关于从配置中注入 DTO 的默认值的主要内容,如果未能解决你的问题,请参考以下文章

如果属性对 JPA 无效,我如何在数据库中插入默认值

Magento 数据流(高级)配置文件,默认值

spring-boot -配置文件值注入

spring-boot -配置文件值注入

SpringBoot的@Value注解设置默认值

注入参数的默认值