반응형
RestTemplate Get 요청 방법
private final RestTemplate restTemplate;
// RestTemplateBuilder의 build()를 사용하여 RestTemplate을 생성합니다.
public RestTemplateService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
레스트 템플릿을 매개변수로 받는 것이 아니라, 빌더를 받아서 빌드해줘야 한다!!
public ItemDto getCallObject(String query) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7070")
.path("/api/server/get-call-obj")
.queryParam("query", query)
.encode()
.build()
.toUri();
log.info("uri = " + uri);
ResponseEntity<ItemDto> responseEntity = restTemplate.getForEntity(uri, ItemDto.class);
log.info("statusCode = " + responseEntity.getStatusCode());
return responseEntity.getBody();
}
URI 를 만들고, getForEntity로 get 해올 수 있는데 그에 대한 응답 클래스를 알려주어야 한다.
여러 요소를 json으로 가져올 때
{
"items":[
{"title":"Mac","price":3888000},
{"title":"iPad","price":1230000},
{"title":"iPhone","price":1550000},
{"title":"Watch","price":450000},
{"title":"AirPods","price":350000}
]
}
이런 식으로.
// json
implementation 'org.json:json:20230227'
JSON 다룰 때 도움이 되는 라이브러리를 설치하고,
public List<ItemDto> getCallList() {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7070")
.path("/api/server/get-call-list")
.encode()
.build()
.toUri();
log.info("uri = " + uri);
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
log.info("statusCode = " + responseEntity.getStatusCode());
log.info("Body = " + responseEntity.getBody());
return fromJSONtoItems(responseEntity.getBody());
}
Dto.class 가 아닌, String.class 로 받고,
public List<ItemDto> fromJSONtoItems(String responseEntity) {
JSONObject jsonObject = new JSONObject(responseEntity); // 문자열 정보를 JSONObject 로 변경
JSONArray items = jsonObject.getJSONArray("items"); // JSONObject에서 items 배열 꺼내기
List<ItemDto> itemDtoList = new ArrayList<>();
for (Object item : items) {
ItemDto itemDto = new ItemDto((JSONObject) item);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
근데 스프링에서 잭슨 기본값으로 있는데 왜 JSONObject 쓴 거지??
POST 요청 방법
public ItemDto postCall(String query) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7070")
.path("/api/server/post-call/{query}")
.encode()
.build()
.expand(query)
.toUri();
log.info("uri = " + uri);
User user = new User("Robbie", "1234");
ResponseEntity<ItemDto> responseEntity = restTemplate.postForEntity(uri, user, ItemDto.class);
log.info("statusCode = " + responseEntity.getStatusCode());
return responseEntity.getBody();
}
이번에는 쿼리스트링이 아닌, path variable 방식으로도 보낼 수 있음. expand 로 넣을 수 있음.
restTemplate.postForEntity(URI, 보낼 객체(자동으로 JSON 변환), 받을 객체) 로 전송 가능.
요청 Header에 정보를 넣기
public List<ItemDto> exchangeCall(String token) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7070")
.path("/api/server/exchange-call")
.encode()
.build()
.toUri();
log.info("uri = " + uri);
User user = new User("Robbie", "1234");
RequestEntity<User> requestEntity = RequestEntity
.post(uri)
.header("X-Authorization", token)
.body(user);
ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);
return fromJSONtoItems(responseEntity.getBody());
}
RequestEntity 를 이용하여 가능함.
반응형
'TIL ✍️' 카테고리의 다른 글
23년 11월 30일(목요일) - 42번째 TIL (0) | 2023.11.30 |
---|---|
23년 11월 29일(수요일) - 41번째 TIL (1) | 2023.11.29 |
23년 11월 24일(금요일) - 39번째 TIL (0) | 2023.11.24 |
23년 11월 23일(목요일) - 38번째 TIL (0) | 2023.11.23 |
23년 11월 22일(수요일) - 37번째 TIL (0) | 2023.11.22 |