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 |