오늘한일
- RestTemplate이란 무엇일지 공부 하였다.
RestTemplate이란?
- Spring에서 지원하는 객체로 간편하게 Rest 방식 API를 호출할 수 있는 Spring 내장 클래스입니다.
- Spring 3.0부터 지원되었고, json, xml 응답을 모두 받을 수 있습니다.
- Rest API 서비스를 요청 후 응답 받을 수 있도록 설계되어있으며 HTTP 프로토콜의 메소드(ex. GET, POST, DELETE, PUT)들에 적합한 여러 메소드들을 제공합니다.
※ Spring Framework 5부터는 WebFlux 스택과 함께 Spring은 WebClient 라는 새로운 HTTP 클라이언트를 도입하여 기존의 동기식 API를 제공할 뿐 만 아니라 효율적인 비차단 및 비동기 접근 방식을 지원하여, Spring 5.0 이후 부터는 RestTemplate는 deprecated 되었습니다. (WebClient 사용 지향
RestTemplate 메서드
※ 기본적으로exchange()함수를 많이 사용한다.
- get 요청에 header가 필요한 경우 get Method에서는 header를 추가할 수 없으므로 exchange method를 사용한다.
RestTemplate 사용방법
프로젝트 2개를 만들어서 Client 입장의 서버는 8080 port, Server 입장의 서버는 7070 port로 동시에 실행시킨다
Client 입장 서버
RestTemplateController
package com.sparta.springresttemplateclient.controller;
import com.sparta.springresttemplateclient.dto.ItemDto;
import com.sparta.springresttemplateclient.service.RestTemplateService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/client")
public class RestTemplateController {
private final RestTemplateService restTemplateService;
public RestTemplateController(RestTemplateService restTemplateService) {
this.restTemplateService = restTemplateService;
}
@GetMapping("/get-call-obj")
public ItemDto getCallObject(String query) {
return restTemplateService.getCallObject(query);
}
@GetMapping("/get-call-list")
public List<ItemDto> getCallList() {
return restTemplateService.getCallList();
}
@GetMapping("/post-call")
public ItemDto postCall(String query) {
return restTemplateService.postCall(query);
}
@GetMapping("/exchange-call")
public List<ItemDto> exchangeCall(@RequestHeader("Authorization") String token) {
return restTemplateService.exchangeCall(token);
}
}
ItemDto
package com.sparta.springresttemplateclient.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class ItemDto {
private String title;
private int price;
}
User
package com.sparta.springresttemplateclient.entity;
import lombok.Getter;
@Getter
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
}
RestTemplateService
package com.sparta.springresttemplateclient.service;
import com.sparta.springresttemplateclient.dto.ItemDto;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class RestTemplateService {
public ItemDto getCallObject(String query) {
return null;
}
public List<ItemDto> getCallList() {
return null;
}
public ItemDto postCall(String query) {
return null;
}
public List<ItemDto> exchangeCall(String token) {
return null;
}
}
Server 입장 서버
ItemController
package com.sparta.springresttemplateserver.controller;
import com.sparta.springresttemplateserver.dto.ItemResponseDto;
import com.sparta.springresttemplateserver.dto.UserRequestDto;
import com.sparta.springresttemplateserver.entity.Item;
import com.sparta.springresttemplateserver.service.ItemService;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/server")
public class ItemController {
private final ItemService itemService;
public ItemController(ItemService itemService) {
this.itemService = itemService;
}
@GetMapping("/get-call-obj")
public Item getCallObject(@RequestParam String query) {
return itemService.getCallObject(query);
}
@GetMapping("/get-call-list")
public ItemResponseDto getCallList() {
return itemService.getCallList();
}
@PostMapping("/post-call/{query}")
public Item postCall(@PathVariable String query, @RequestBody UserRequestDto requestDto) {
return itemService.postCall(query, requestDto);
}
@PostMapping("/exchange-call")
public ItemResponseDto exchangeCall(@RequestHeader("X-Authorization") String token, @RequestBody UserRequestDto requestDto) {
return itemService.exchangeCall(token, requestDto);
}
}
UserRequestDto
package com.sparta.springresttemplateserver.dto;
import lombok.Getter;
@Getter
public class UserRequestDto {
private String username;
private String password;
}
ItemResponseDto
package com.sparta.springresttemplateserver.dto;
import com.sparta.springresttemplateserver.entity.Item;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
@Getter
public class ItemResponseDto {
private final List<Item> items = new ArrayList<>();
public void setItems(Item item) {
items.add(item);
}
}
Item
package com.sparta.springresttemplateserver.entity;
import lombok.Getter;
@Getter
public class Item {
private String title;
private int price;
public Item(String title, int price) {
this.title = title;
this.price = price;
}
}
ItemService
package com.sparta.springresttemplateserver.service;
import com.sparta.springresttemplateserver.dto.ItemResponseDto;
import com.sparta.springresttemplateserver.dto.UserRequestDto;
import com.sparta.springresttemplateserver.entity.Item;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class ItemService {
private final List<Item> itemList = Arrays.asList(
new Item("Mac", 3_888_000),
new Item("iPad", 1_230_000),
new Item("iPhone", 1_550_000),
new Item("Watch", 450_000),
new Item("AirPods", 350_000)
);
public Item getCallObject(String query) {
return null;
}
public ItemResponseDto getCallList() {
return null;
}
public Item postCall(String query, UserRequestDto requestDto) {
return null;
}
public ItemResponseDto exchangeCall(String token, UserRequestDto requestDto) {
return null;
}
}
'TIL' 카테고리의 다른 글
231129_TIL (0) | 2023.11.29 |
---|---|
231128_TIL (1) | 2023.11.28 |
231110_TIL (0) | 2023.11.10 |
231109_TIL (1) | 2023.11.09 |
231108_TIL (0) | 2023.11.08 |