[RestTemplate] exchange 시 직렬화클래스로 타입 클래스를 사용하고 싶을 때

갓김치·2022년 9월 27일
0

기타

목록 보기
16/16

들어가기 전

  • 공공데이터포털용 DTO 만들다가 제너릭을 넣으면 앞으로 돌려쓸 수 있을 것 같아서 제너릭을 시도

상황

GovDataApiResultDTO.class

@Getter
@NoArgsConstructor
@Schema(name = "공공데이터포털 API 결과값에 해당하는 전체 리스트 DTO")
public class GovDataApiResultDTO<T> {
    private GovDataApiResponseDTO<T> response;

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class GovDataApiResponseDTO<T> {
        private GovDataApiHeaderDTO header;
        private GovDataApiBodyDTO<T> body;
    }

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class GovDataApiHeaderDTO {
        @Schema(description = "결과코드")
        private String resultCode; // 00: 성공
        @Schema(description = "결과메시지")
        private String resultMsg; // NORMAL, SERVICE
    }

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class GovDataApiBodyDTO<T> {
        @Schema(description = "공휴일 목록")
        private GovDataApiItemsDTO<T> items;

        @Schema(description = "페이지당항목수")
        private Integer numOfRows; // 10
        @Schema(description = "페이지")
        private Integer pageNo; // 1
        @Schema(description = "모든항목수")
        private Integer totalCount; // 17
    }

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class GovDataApiItemsDTO<T> {
        private List<T> item;
    }
}

ApiService.class

ResponseEntity<GovDataApiResultDTO<GovDataApiHolidayItemDTO>> httpResponse = restTemplate.exchange(uri, HttpMethod.GET, httpRequest, new ParameterizedTypeReference<GovDataApiResultDTO<GovDataApiHolidayItemDTO>>(){});
  • ParameterizedTypeReference를 이용하면 restTemplate 사용시 제너릭 타입 사용 가능

참고자료

profile
갈 길이 멀다

0개의 댓글