Client 입장 서버
- 요청 받은 검색어를 Query String 방식으로 Server 입장의 서버로 RestTemplate를 사용하여 요청
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(); }
- UriComponentsBuilder의 expand를 사용하여 {query} 안의 값을 동적으로 처리 가능
- RestTemplate의 postForEntity는 Post 방식으로 해당 URI의 서버에 요청 진행
restTemplate.postForEntity(uri, user, ItemDto.class);
- 첫 번째 파라미터에는 URI
- 두 번째 파라미터에는 HTTP Body에 넣어줄 데이터를 넣음
- Java 객체를 두 번째 파라미터에 넣으면 자동으로 JSON 형태로 변환됨
- 세 번째 파라미터에는 전달 받은 데이터와 매핑하여 인스턴스화할 클래스의 타입을 주면 됨
Server 입장 서버
- Server 입장의 서버에서 itemList를 조회하여 요청 받은 검색어에 맞는 Item 반환
public Item postCall(String query, UserRequestDto userRequestDto) { System.out.println("userRequestDto.getUsername() = " + userRequestDto.getUsername()); System.out.println("userRequestDto.getPassword() = " + userRequestDto.getPassword()); return getCallObject(query); }
- 전달 받은 HTTP Body의 User 데이터를 확인함