У меня есть контроллер, который должен получать данные в строке запроса (я не могу использовать тело, потому что я взаимодействую с устаревшей системой).
Я написал параметры запроса карты DTO для объекта и использую ValidationPipe для проверки и преобразования данных в мой DTO.
Итак, у меня есть следующее:
import { Get, Controller, Query, Post, Body, UsePipes, ValidationPipe } from '@nestjs/common';
class TestDto {
@IsNumber()
field1: number;
@IsBoolean()
field2: boolean;
}
@Controller()
export class AppController {
constructor() {}
@Get()
@UsePipes(new ValidationPipe({ whitelist: false, transform: true}))
root(@Query() dto: TestDto): TestDto {
return dto;
}
}
Весь предыдущий код компилируется и следует документации NestJS, но когда я вызываю http://localhost:3000/?field1=15&field2=true, я получаю это:
{
"statusCode": 400,
"error": "Bad Request",
"message": [
{
"target": {
"field1": "15",
"field2": "true"
},
"value": "15",
"property": "field1",
"children": [],
"constraints": {
"isNumber": "field1 must be a number"
}
},
{
"target": {
"field1": "15",
"field2": "true"
},
"value": "true",
"property": "field2",
"children": [],
"constraints": {
"isBoolean": "field2 must be a boolean value"
}
}
]
}
Оба поля действительны в соответствии с атрибутами, но с конвейеромотклоняет запрос. Если я перехожу с @IsNumber на @IsNumberString и с @IsBoolean на @IsBooleanString, это подтверждает, но я не получаю преобразованные данные (то есть вместо моего DTO я получаю простой объект)
Кто-нибудь сталкивался с чем-то вродеэто?