일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- AOP
- Starter
- vaultTemplate
- AOP target
- findFirst
- auto configuration
- spring
- jpa
- ResponseBodyAdvice
- @AutoConfiguration
- Stream
- AccessLevel
- RestTemplate
- restTemple
- findAny
- AOP 매개변수
- JsonStringType
- LogInterceptor
- gradle
- java
- AOP this
- fotmatter
- ClientHttpRequestInterceptor
- JsonType
- Spring Boot
- 포맷터
- 쓰레드 안전
- Thread Safety
- Save Action
- 개방/폐쇄 원칙
- Today
- Total
맨땅에 헤딩하는 개바른자
restTemple 제네릭Type 사용 본문
api통신을 할 때 유용하게 사용할 수 있는 기능을 말하자만 restTemple을 말할 수 있을 것 같다.
GET, POST, PUT, DELETE 등의 다양한 Http통신 메소드 타입이 지원되지 때문에 restAPI를 작성할 때도 유용하다
자 그러면 간단한 예시로 API를 호출하는 소스를 보겠습니다.
단일객체 응답
Object o = restTemplate.postForEntity("URL", null, Object.class).getBody();
열거형 응답
List<String> list1 = restTemplate.postForEntity("URL", null, List.class).getBody();
List list2 = restTemplate.postForEntity("URL", null, List.class).getBody();
2가지의 호출 방식이 있습니다.
단일객체 응답은 Object.class 형태로 지정해서 응답을 받습니다.
열거형 응답은 List.class 형태로 지정해서 응답을 받았습니다.
여기서 주목해야할 부분은 List.class 입니다.
보통 코드를 짤 때 List는 List<String> 형태로 제네릭이 붙일 수 가 있습니다. 그래서 위에는 list1라고 선언하여 값을 할당 받게 선언하였습니다.
여기서..
저는 인텔리제이를 사용하는데 신경쓰이게 노란색블럭이 코드를 감싸주는걸 볼수 있을 겁니다.
restTemplate.postForEntity("URL", null, List.class).getBody();
그리고 list2의 경우 List 맨앞의 객체가 노란색블럭으로 감싸주는걸 확인 할 수 있습니다.
코드 동작에는 문제가 없습니다. 다만 가독성부분과 타입이 명확하지 않은 형태가 존재하기 때문에 무언가가 굉장히 신경이 쓰이게 됩니다.
그러면 노란색블럭이 안되게 하려면 어떻게해야할까요?
List<String> list3 = restTemplate.exchange("url", HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>(){}).getBody();
new ParameterizedTypeReference<List<String>>(){} 을 사용하면 신경쓰이던 노란색 블럭리 사라졌습니다.
뭔가 덕지덕지 붙은 느낌이지만 그래도 신경쓰이는 노란블럭과 가독성이 개선되었습니다.
그러나 뭔가 말끔한 느낌이 없다고 듭니다.
2022.04.28 시간이 부족하여 다음날 이어서 추가 내용을 작성하겠습니다.
'개발 TIP' 카테고리의 다른 글
CRUD 공통로직 만들기 (0) | 2022.05.10 |
---|---|
Request DTO Validate Aspect 적용기 (0) | 2022.05.10 |
restTemplate LogInterceptor (0) | 2022.05.03 |
MDC LogFilter 사용하기 (0) | 2022.05.02 |
enum 비교 시 어떤게 좋을까? "equals" or "==" (0) | 2022.04.15 |