【发布时间】:2025-12-27 21:35:12
【问题描述】:
我的照片和标签对象具有如下所示的 DTO:
export class PhotoDto {
readonly title: string
readonly file: string
readonly tags: TagDto[]
}
export class TagDto {
readonly name: string
}
我在我的photo.service.ts 中使用PhotoDto 并最终在photo.controller.ts 中创建照片:
// In photo.service.ts
async create(createPhotoDto: PhotoDto): Promise<PhotoEntity> {
// ...
return await this.photoRepo.create(createPhotoDto)
}
// In photo.controller.ts
@Post()
async create(@Body() createPhotoDto: PhotoDto): Promise<PhotoEntity> {
// ...
}
但是,API 正文中的输入应具有以下结构:
{
"title": "Photo Title",
"file": "/some/path/file.jpg",
"tags": [
{
"name": "holiday"
},
{
"name": "memories"
}
]
}
如何更改Body 的输入形状以改为接受此结构?
{
"title": "Photo Title",
"file": "/some/path/file.jpg",
"tags": ["holiday", "memories"]
}
我尝试创建 2 个不同的 DTO,一个 CreatePhotoDto 和一个 InputPhotoDto,一个用于控制器中所需的输入形状,一个用于服务和实体,但这最终会非常混乱,因为有一个在 2 个 DTO 之间进行转换的工作量很大。
从Post 请求的Body 获得不同的输入形状,然后将其转换为实体使用所需的 DTO 的正确方法是什么?
【问题讨论】:
标签: javascript node.js typescript serialization nestjs