Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@Query(new ValidationPipe()) DTO에서 string타입이 아닌 다른 타입 선언 후 postman에서 확인하고자 할 때 #4

Open
develjsw opened this issue Jun 5, 2023 · 0 comments

Comments

@develjsw
Copy link
Owner

develjsw commented Jun 5, 2023

아래 소스와 같이 query param을 받는 DTO안에 type을 number로 선언해둔 경우
postman에서는 기본 타입인 string을 제외하고 다른 타입을 사용할 수 없기에 에러 발생하여 테스트 불가.

[ controller ]

@Get()
  async getMemberList(
      @Query(new ValidationPipe()) listMemberDto: ListMemberDto
  ) {
    return await this.memberService.getMemberList(listMemberDto);
  }

[ DTO (as-is) ]

import {
    IsNotEmpty,
    IsNumber,
} from 'class-validator';

export class ListMemberDto {
    @IsNotEmpty()
    @IsNumber()
    page: number;

    @IsNotEmpty()
    @IsNumber()
    pageSize: number;
}

<error 발생>
{
"status": 400,
"message": "Bad Request Exception"
}

이때 해결할 수 있는 방법으로 DTO에 class-transformer을 사용하여 형 변환을 해주면 해당 pipe의 유효성 검사를 통과 시킬 수 있음.

  • 주의 할 부분은 타입을 완전히 변환 시킨 것은 아니라는 점으로 controller에서 console.log(listMemberDto.page); 를 출력해보면 그대로 string인 것을 확인할 수 있음.

[ DTO (to-be) ]

import {
    IsNotEmpty,
    IsNumber,
} from 'class-validator';
import { Type } from 'class-transformer';

export class ListMemberDto {
    @IsNotEmpty()
    @IsNumber()
    @Type(() => Number) 
    page: number;

    @IsNotEmpty()
    @IsNumber()
    @Type(() => Number)
    pageSize: number;
}
@develjsw develjsw changed the title postman으로 queryParams type 선언 불가한 경우 @Query(new ValidationPipe()) DTO에서 string타입이 아닌 다른 타입 선언 후 postman에서 확인하고자 할 때 Jun 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant