반응형

프론트 팀에서 Cors와 함께 온 연락으로 Swagger Example의 수정 요청이었다.

 

Swagger의 API를 누르면 밑에 응답의 예시로 Example Value가 보여지게 되는 데, 응답의 예시가 잘못 나온 다는 것이었다.

나는 당연히 '내가 잘못 쳤구나'라는 생각으로 코드를 봤는데 코드에 이상은 없었다.

하지만 에러는 발생하였다.

 

코드와 같이 좀 더 자세히 보도록 하자

현재 Response가 TechPostRes.class로 작성이 되어있다.

해당하는 TechPostRes이다.

package cobo.blog.domain.Home.Data.Dto;

import cobo.blog.global.Data.Entity.TechPostEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
public class TechPostRes {

    @ApiModelProperty(
            value = "TechPost 제목",
            example = "한승규의 스프링 고민"
    )
    private String title;
    @ApiModelProperty(
            value = "작성한 사람의 이름",
            example = "한승규"
    )
    private String user;

    @ApiModelProperty(
            value = "작성한 날짜를 yyyyMMdd 8자리 문자열로 응답",
            example = "20230711"
    )
    private String Date;

    public TechPostRes(TechPostEntity techPost) {
        this.title = techPost.getTitle();
        this.user = techPost.getUser().getName();
        this.Date = techPost.getCreatedAt().toString();
    }
}

하지만...? 이에 해당하는 Example Value를 보자.

DTO와 다르게 나온다.

분명히 3개의 멤버에 대한 값이 나와야 하는데, 지금 엄청 많이 나오고 있다.

 

왜 그럴지 생각을 해보았는데

지금 TechPostRes라는 클래스가 다른 패키지에 작성이 되어 있다.

다른 페이지에서 사용하는 API에 대한 Response이다.

 

확인을 해보니 그 DTO에 대한 Example Value였다.

그럼 내가 그 DTO로 잘못 import 한 것일까?

확인을 해보면 다른 패키지에서 가져오는 TechPostRes는 없는 것을 볼 수 있다.

 

뭔가 Swagger가 이름 같으면 그냥 가져오는 것 같아서 앞에 어떤 Controller가 사용하는지로 이름을 변경하였다.

 

TechPostRes앞에 Home을 붙여 HomeTechPostRes라고 작성하였는데 

이렇게 하니까

제대로 Example Value가 나오는 것을 볼 수 있다.

 

결론 Home패키지 안에 있어서 controller의 이름을 붙이지 않으려 했는데, 어쩔 수 없이 이름들을 구분하기 위해 붙여주게 되었다.

DTO를 작성하더라도 이름을 모두 다르게 하자

'블로그 개발 프로젝트' 카테고리의 다른 글

ExceptionHandler  (0) 2023.07.28
Swagger @ApiModelProperty에 example List  (0) 2023.07.28
CORS Error  (0) 2023.07.28
JPA으로 Paging  (0) 2023.07.24
JPA TopBy  (0) 2023.07.24

+ Recent posts