- [Springboot] 38. Server to Server란?2024년 08월 14일
- Song hyun
- 작성자
- 2024.08.14.:23
728x90반응형[Springboot] 38. Server to Server란?
1. Server to Server란?
2. Rest Template의 대표적인 메서드들
3. Server to Server 사용해보기
(1) 새로운 Spring Starter Project 만들기
(2) HomeController.java
package com.example.demo.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import lombok.extern.slf4j.Slf4j; // @RestController = @Controller + @ResponseBody @RestController // IoC 대상 @Slf4j // 비동기 방식으로 사용된다. public class HomeController { private Logger logger = LoggerFactory.getLogger(this.getClass()); // 주소 설계 : http://localhost:8080/m-todos/${id} // 테스트 주소: http://localhost:8080/m-todos/10 @GetMapping("/m-todos/{id}") public ResponseEntity<?> restTest1(@PathVariable(name="id")Integer id) { // 1,2,User... -> 뭘로 할지 못정하겠어~ // => 와일드 카드! // 1. 데이터 추출 확인 System.out.println("id : "+id); return ResponseEntity.status(HttpStatus.OK).body("반가워~"); } }
(3) jsonPlacHolder - todos 받아오기
package com.example.demo.controller; import java.net.URI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import lombok.extern.slf4j.Slf4j; // @RestController = @Controller + @ResponseBody @RestController // IoC 대상 @Slf4j // 비동기 방식으로 사용된다. public class HomeController { private Logger logger = LoggerFactory.getLogger(this.getClass()); // 주소 설계 : http://localhost:8080/m-todos/${id} // 테스트 주소: http://localhost:8080/m-todos/10 @GetMapping("/m-todos/{id}") public ResponseEntity<?> restTest1(@PathVariable(name="id")Integer id) { // 1,2,User... -> 뭘로 할지 못정하겠어~ // => 와일드 카드! // 1. 데이터 추출 확인 System.out.println("id : "+id); // RestTemplate 사용법 // 1. URL 객체를 설정한다. URI uri = UriComponentsBuilder .fromUriString("https://jsonplaceholder.typicode.com/") .path("/todos") .path("/"+id) .build() .toUri(); // 2. RestTemplate restTemplate1 = new RestTemplate(); ResponseEntity<String> response = restTemplate1.getForEntity(uri, String.class); System.out.println(response.getHeaders()); System.out.println("--------------------------"); System.out.println(response.getBody()); return response; } }
package com.example.demo.controller; import java.net.URI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import lombok.extern.slf4j.Slf4j; // @RestController = @Controller + @ResponseBody @RestController // IoC 대상 @Slf4j // 비동기 방식으로 사용된다. public class HomeController { private Logger logger = LoggerFactory.getLogger(this.getClass()); // 주소 설계 : http://localhost:8080/m-todos/${id} // 테스트 주소: http://localhost:8080/m-todos/10 @GetMapping("/m-todos/{id}") public ResponseEntity<?> restTest1(@PathVariable(name="id")Integer id) { // 1,2,User... -> 뭘로 할지 못정하겠어~ // => 와일드 카드! // 1. 데이터 추출 확인 System.out.println("id : "+id); // RestTemplate 사용법 // 1. URL 객체를 설정한다. URI uri = UriComponentsBuilder .fromUriString("https://jsonplaceholder.typicode.com/") .path("/todos") .path("/"+id) .build() .toUri(); // 2. RestTemplate restTemplate1 = new RestTemplate(); ResponseEntity<String> response = restTemplate1.getForEntity(uri, String.class); System.out.println(response.getHeaders()); System.out.println("--------------------------"); System.out.println(response.getBody()); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response.getBody()); } }
(4) Todo 모델링하기
-TodoDTO.java
package com.example.demo.DTO; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @Data @AllArgsConstructor @NoArgsConstructor @ToString @Builder public class TodoDTO { private Integer userId; private Integer id; private String title; private boolean completed; }
(5) json을 다른 데이터타입으로 반환받기
package com.example.demo.controller; import java.net.URI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import com.example.demo.DTO.TodoDTO; import lombok.extern.slf4j.Slf4j; // @RestController = @Controller + @ResponseBody @RestController // IoC 대상 @Slf4j // 비동기 방식으로 사용된다. public class HomeController { private Logger logger = LoggerFactory.getLogger(this.getClass()); // // 주소 설계 : http://localhost:8080/m-todos/${id} // // 테스트 주소: http://localhost:8080/m-todos/10 // @GetMapping("/m-todos/{id}") // public ResponseEntity<?> restTest1(@PathVariable(name="id")Integer id) { // // 1,2,User... -> 뭘로 할지 못정하겠어~ // // => 와일드 카드! // // // 1. 데이터 추출 확인 // System.out.println("id : "+id); // // // RestTemplate 사용법 // // 1. URL 객체를 설정한다. // URI uri = UriComponentsBuilder // .fromUriString("https://jsonplaceholder.typicode.com/") // .path("/todos") // .path("/"+id) // .build() // .toUri(); // // // 2. // RestTemplate restTemplate1 = new RestTemplate(); // ResponseEntity<String> response = restTemplate1.getForEntity(uri, String.class); // System.out.println(response.getHeaders()); // System.out.println("--------------------------"); // System.out.println(response.getBody()); // // // return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response.getBody()); // } @GetMapping("/m-todos/{id}") public ResponseEntity<TodoDTO> restTest1(@PathVariable(name="id")Integer id) { // 1,2,User... -> 뭘로 할지 못정하겠어~ // => 와일드 카드! // 1. 데이터 추출 확인 System.out.println("id : "+id); // RestTemplate 사용법 // 1. URL 객체를 설정한다. URI uri = UriComponentsBuilder .fromUriString("https://jsonplaceholder.typicode.com/") .path("/todos") .path("/"+id) .build() .toUri(); // 2. RestTemplate restTemplate1 = new RestTemplate(); ResponseEntity<TodoDTO> response = restTemplate1.getForEntity(uri, TodoDTO.class); System.out.println(response.getHeaders()); System.out.println("--------------------------"); System.out.println(response.getBody()); System.out.println(response.getBody().toString()); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response.getBody()); } // 주소 설계: http://localhost:8080/exchange-test @GetMapping("/exchange-test") public ResponseEntity<?> restChangeTest() { // 여기 주소는 리소스 서버 주소 설정을 해야 한다. URI uri = UriComponentsBuilder .fromUriString("https://jsonplaceholder.typicode.com/") .path("/posts").build().toUri(); // 2. 객체 생성 RestTemplate restTemplate1 = new RestTemplate(); // HTTP 메세지 Header 생성하기 // exchange 메서드 활용 // 1. 헤더 구성 HttpHeaders headers = new HttpHeaders(); // 'Content-type': 'application/json; charset=UTF-8' headers.add("Content-type", "application/json; charset=UTF-8"); // 2. 바디 구성 MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); params.add("title", "안녕, 반가워"); params.add("body", "후미진 어느 언덕에서 도시락 먹기"); params.add("userId", "11"); // 3. 헤더와 바디 결합 --> HttpEntity라는 Object가 받는다. HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<>(params,headers); // 4. RestTemplate을 활용해서 HTTP 통신 요청 ResponseEntity<String> response = restTemplate1.exchange(uri, HttpMethod.POST, requestEntity,String.class); System.out.println("response Header : "+response.getHeaders()); System.out.println("response Body : "+response.getBody()); return ResponseEntity.status(HttpStatus.CREATED).body(response.getBody()); } }
728x90반응형'Springboot' 카테고리의 다른 글
[Springboot] 40. OAuth 2.0 (2단계-Kakao Developers API 응답 코드 받기) (0) 2024.08.14 [Springboot] 39. OAuth 2.0 (1단계-Kakao Developers 사용하기) (0) 2024.08.14 [Springboot] 37. 파일 확장자 인증 검사 (0) 2024.08.14 [Springboot] 36. 존재하지 않는 경로에 대한 요청 처리 (0) 2024.08.14 [Springboot] 35. 파일 업로드(3단계-ResourceHandler 사용하기) (0) 2024.08.14 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)