我正在尝试创建一个具有另一个DTO作为数组的DTO,但是在发送body时,nestjs/swagger没有检测到body内容。我的DTO是:
export class CreatePageDto {
@ApiHideProperty()
createAt: Date;
@ApiHideProperty()
updateAt: Date;
@ApiProperty({
type: CreatePageTranslateDto,
isArray: true,
})
translations: CreatePageTranslateDto[];
}
export class CreatePageTranslateDto {
@ApiProperty()
slug: string;
@ApiProperty()
title: string;
@ApiProperty({
enum: AvailableLanguages,
})
lang: AvailableLanguages;
}
当一个人发表这样的文章时:
curl --location --request POST 'http://localhost:3000/pages' \
--header 'Content-Type: application/json' \
--data-raw '{
"translations": [
{
"slug": "nombre-de-ejemplo",
"title": "Nombre de ejemplo",
"lang": "es"
}
]
}'
我得到了一个空虚的身体。
发布于 2022-10-30 19:26:16
问题是类验证器。我决定在全球范围内设置类验证器,但我做得不对。问题是由于白名单属性设置为true:“如果设置为true,验证器将从没有任何装饰器的任何属性中删除已验证的对象”。
发布于 2022-10-31 13:47:24
您必须先切换类位置,然后请将这个装饰器@ApiExtraModels()
添加到类CreatePageTranslateDto
之上。
所以,代码会是这样的:
@ApiExtraModels() <-----
export class CreatePageTranslateDto {
@ApiProperty()
slug: string;
@ApiProperty()
title: string;
@ApiProperty({
enum: AvailableLanguages,
})
lang: AvailableLanguages;
}
export class CreatePageDto {
@ApiHideProperty()
createAt: Date;
@ApiHideProperty()
updateAt: Date;
@ApiProperty({
type: CreatePageTranslateDto,
isArray: true,
})
translations: CreatePageTranslateDto[];
}
发布于 2022-11-14 09:33:09
为了验证嵌套的DTO,您必须在下面这样做。
import { Type } from 'class-transformer';
import { ValidateNested } from 'class-validator';
@ApiProperty({
type: CreatePageTranslateDto,
isArray: true,
})
@ValidateNested({ each: true })
@Type(() => CreatePageTranslateDto)
translations: CreatePageTranslateDto[];
https://stackoverflow.com/questions/74247890
复制相似问题