From 3a7eddc084405ad491d8a4476aab2f0a4decea1b Mon Sep 17 00:00:00 2001 From: yohan Date: Thu, 22 Aug 2024 16:17:02 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=202-1=20RestTemplate=20Get=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=ED=95=98=EA=B8=B0=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Todo.java | 6 +++++- .../java/cholog/TodoClientWithRestTemplate.java | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spring-http-client-1/initial/src/main/java/cholog/Todo.java b/spring-http-client-1/initial/src/main/java/cholog/Todo.java index 7f3644aa..6eca1bd4 100644 --- a/spring-http-client-1/initial/src/main/java/cholog/Todo.java +++ b/spring-http-client-1/initial/src/main/java/cholog/Todo.java @@ -3,8 +3,12 @@ public class Todo { // TODO: Todo 객체가 가지는 필드들을 정의 + private Long id; + private Long userId; + private String title; + private boolean completed; public String getTitle() { - return null; + return this.title; } } diff --git a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java index 0cc73f46..a7f84553 100644 --- a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java +++ b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java @@ -1,6 +1,10 @@ package cholog; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; public class TodoClientWithRestTemplate { private final RestTemplate restTemplate; @@ -10,8 +14,14 @@ public TodoClientWithRestTemplate(RestTemplate restTemplate) { } public Todo getTodoById(Long id) { - // TODO: restTemplate을 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); + + URI uri = UriComponentsBuilder + .fromHttpUrl("http://jsonplaceholder.typicode.com") + .path("/todos/{todoId}") + .build(id); + + ResponseEntity result = restTemplate.getForEntity(uri, Todo.class); + + return result.getBody(); } } From ce431eb97439001a7cee08c14e5efde5b2b04cba Mon Sep 17 00:00:00 2001 From: yohan Date: Thu, 22 Aug 2024 16:31:33 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=202-2=20RestTemplate=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cholog/TodoClientWithRestTemplate.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java index a7f84553..a7ecce83 100644 --- a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java +++ b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestTemplate.java @@ -1,6 +1,8 @@ package cholog; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -20,8 +22,10 @@ public Todo getTodoById(Long id) { .path("/todos/{todoId}") .build(id); - ResponseEntity result = restTemplate.getForEntity(uri, Todo.class); - - return result.getBody(); + try { + return restTemplate.getForEntity(uri, Todo.class).getBody(); + } catch (HttpClientErrorException e) { + throw new TodoException.NotFound(id); + } } } From 181468277286e381bca0fcc0ce8ee83f3be76a07 Mon Sep 17 00:00:00 2001 From: yohan Date: Thu, 22 Aug 2024 16:50:11 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=203-1=20RestClient=20Get=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=ED=95=98=EA=B8=B0=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cholog/TodoClientWithRestClient.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java index ab2b6f5c..9d8b2bf7 100644 --- a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java +++ b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java @@ -1,5 +1,7 @@ package cholog; +import com.fasterxml.jackson.core.type.TypeReference; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.web.client.RestClient; import java.util.Collections; @@ -14,7 +16,11 @@ public TodoClientWithRestClient(RestClient restClient) { public List getTodos() { // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo 리스트로 변환하여 반환 - return Collections.emptyList(); + + return restClient.get() + .uri("/todos") + .retrieve() + .body(new ParameterizedTypeReference>(){}); } public Todo getTodoById(Long id) { From 731ab69ca474be713e9e2947454dc1cb596de490 Mon Sep 17 00:00:00 2001 From: yohan Date: Thu, 22 Aug 2024 16:52:52 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=203-2=20RestClient=20Get=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=9D=98=20=EC=9D=91=EB=8B=B5=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cholog/TodoClientWithRestClient.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java index 9d8b2bf7..20c6cd65 100644 --- a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java +++ b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java @@ -15,8 +15,6 @@ public TodoClientWithRestClient(RestClient restClient) { } public List getTodos() { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo 리스트로 변환하여 반환 - return restClient.get() .uri("/todos") .retrieve() @@ -24,8 +22,9 @@ public List getTodos() { } public Todo getTodoById(Long id) { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); + return restClient.get() + .uri("/todos/{todoId}", id) + .retrieve() + .body(Todo.class); } } From 07a1c835b0826f4f0c815105ae46fb84bf80ebb8 Mon Sep 17 00:00:00 2001 From: yohan Date: Thu, 22 Aug 2024 16:58:01 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=203-3=20RestClient=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cholog/TodoClientWithRestClient.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java index 20c6cd65..cb76c6a7 100644 --- a/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java +++ b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpStatusCode; import org.springframework.web.client.RestClient; import java.util.Collections; @@ -25,6 +26,9 @@ public Todo getTodoById(Long id) { return restClient.get() .uri("/todos/{todoId}", id) .retrieve() + .onStatus(HttpStatusCode::is4xxClientError, (request, response) -> { + throw new TodoException.NotFound(id); + }) .body(Todo.class); } }