From a4484938679f1c5a1c230f9a0c7ff812e9ab6a44 Mon Sep 17 00:00:00 2001 From: "gib.son" Date: Mon, 26 Aug 2024 02:51:20 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20restTemplate=EC=9D=84=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EC=9A=94=EC=B2=AD=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EB=82=B4=EA=B3=A0=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20Tod?= =?UTF-8?q?o=EB=A1=9C=20=EB=B3=80=ED=99=98=ED=95=98=EC=97=AC=20=EB=B0=98?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Todo.java | 11 ++++++---- .../cholog/TodoClientWithRestTemplate.java | 22 +++++++++++-------- 2 files changed, 20 insertions(+), 13 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..abd003fb 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 @@ -2,9 +2,12 @@ public class Todo { - // TODO: Todo 객체가 가지는 필드들을 정의 + private Long userId; + private Long id; + private String title; + private Boolean completed; - public String getTitle() { - return null; - } + public String getTitle() { + return 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..fdcf9bc7 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,17 +1,21 @@ package cholog; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; public class TodoClientWithRestTemplate { - private final RestTemplate restTemplate; + private static final String TODO_URL = "http://jsonplaceholder.typicode.com/todos"; - public TodoClientWithRestTemplate(RestTemplate restTemplate) { - this.restTemplate = restTemplate; - } + private final RestTemplate restTemplate; - public Todo getTodoById(Long id) { - // TODO: restTemplate을 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); - } + public TodoClientWithRestTemplate(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + public Todo getTodoById(Long id) { + ResponseEntity todoResponseEntity = restTemplate.getForEntity(TODO_URL + "/" + id, Todo.class); + + return todoResponseEntity.getBody(); + // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 + } } From eb6dad1c82b6e8833f55d8338a51f2ece5446802 Mon Sep 17 00:00:00 2001 From: "gib.son" Date: Mon, 26 Aug 2024 02:53:49 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=EC=A1=B4=EC=9E=AC=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20id=EB=A1=9C=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=9D=84=20=EB=B3=B4=EB=82=BC=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?TodoException.NotFound=20=EC=98=88=EC=99=B8=EB=A5=BC=20?= =?UTF-8?q?=EB=8D=98=EC=A7=90?= 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 fdcf9bc7..350907f6 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,7 @@ package cholog; import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; public class TodoClientWithRestTemplate { @@ -13,9 +14,12 @@ public TodoClientWithRestTemplate(RestTemplate restTemplate) { } public Todo getTodoById(Long id) { - ResponseEntity todoResponseEntity = restTemplate.getForEntity(TODO_URL + "/" + id, Todo.class); + try { + ResponseEntity todoResponseEntity = restTemplate.getForEntity(TODO_URL + "/" + id, Todo.class); - return todoResponseEntity.getBody(); - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 + return todoResponseEntity.getBody(); + } catch (RestClientException e) { + throw new TodoException.NotFound(id); + } } } From 8de295e8d73772eaa68364e3da16793a27d1555a Mon Sep 17 00:00:00 2001 From: "gib.son" Date: Mon, 26 Aug 2024 03:21:46 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20restClient=EC=9D=98=20get=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=9A=94=EC=B2=AD=EC=9D=84=20=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EA=B3=A0=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20Todo=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EB=A1=9C=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cholog/TodoClientWithRestClient.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 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 ab2b6f5c..3a30ba4d 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,25 +1,28 @@ package cholog; -import org.springframework.web.client.RestClient; - -import java.util.Collections; import java.util.List; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.web.client.RestClient; + public class TodoClientWithRestClient { - private final RestClient restClient; + private final RestClient restClient; - public TodoClientWithRestClient(RestClient restClient) { - this.restClient = restClient; - } + public TodoClientWithRestClient(RestClient restClient) { + this.restClient = restClient; + } - public List getTodos() { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo 리스트로 변환하여 반환 - return Collections.emptyList(); - } + public List getTodos() { + return restClient.get() + .uri("/todos") + .retrieve() + .body(new ParameterizedTypeReference<>() { + }); + } - public Todo getTodoById(Long id) { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); - } + public Todo getTodoById(Long id) { + // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 + // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 + return new Todo(); + } } From 5f0f02a0eba42b3e98cfe64b426d828c47c5e214 Mon Sep 17 00:00:00 2001 From: "gib.son" Date: Mon, 26 Aug 2024 03:22:43 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20restClient=EC=9D=98=20get=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=9A=94=EC=B2=AD=EC=9D=84=20=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EA=B3=A0=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20Todo?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=ED=99=98=ED=95=98=EC=97=AC=20=EB=B0=98?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cholog/TodoClientWithRestClient.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 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 3a30ba4d..79dd4701 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 @@ -21,8 +21,11 @@ public List getTodos() { } public Todo getTodoById(Long id) { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 + return restClient.get() + .uri("/todos/{id}", id) + .retrieve() + .body(Todo.class); // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); + } } From e575662d0a9ef40c464c7e5d9959a3164bb4db6e Mon Sep 17 00:00:00 2001 From: "gib.son" Date: Mon, 26 Aug 2024 03:26:03 +0900 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20=EC=A1=B4=EC=9E=AC=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20id=EB=A1=9C=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=9D=84=20=EB=B3=B4=EB=82=BC=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?TodoException.NotFound=20=EC=98=88=EC=99=B8=EB=A5=BC=20?= =?UTF-8?q?=EB=8D=98=EC=A7=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cholog/TodoClientWithRestClient.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 79dd4701..4181f856 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 @@ -3,6 +3,7 @@ import java.util.List; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpStatusCode; import org.springframework.web.client.RestClient; public class TodoClientWithRestClient { @@ -24,8 +25,9 @@ public Todo getTodoById(Long id) { return restClient.get() .uri("/todos/{id}", id) .retrieve() + .onStatus(HttpStatusCode::is4xxClientError, (request, response) -> { + throw new TodoException.NotFound(id); + }) .body(Todo.class); - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - } } From ee52f7da01a8eab6415e0e7b93eec9d2e3714d93 Mon Sep 17 00:00:00 2001 From: "gib.son" Date: Mon, 26 Aug 2024 03:30:52 +0900 Subject: [PATCH 6/6] =?UTF-8?q?fix:=20Not=20Found=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=ED=95=B8=EB=93=A4=EB=A7=81=EC=9D=84=204xx=EA=B0=80=20=EC=95=84?= =?UTF-8?q?=EB=8B=8C=20404=EC=97=90=EB=A7=8C=20=EB=8F=99=EC=9E=91=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= 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, 2 insertions(+), 2 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 4181f856..e71a9cb3 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 @@ -3,7 +3,7 @@ import java.util.List; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpStatusCode; +import org.springframework.http.HttpStatus; import org.springframework.web.client.RestClient; public class TodoClientWithRestClient { @@ -25,7 +25,7 @@ public Todo getTodoById(Long id) { return restClient.get() .uri("/todos/{id}", id) .retrieve() - .onStatus(HttpStatusCode::is4xxClientError, (request, response) -> { + .onStatus(HttpStatus.NOT_FOUND::equals, (request, response) -> { throw new TodoException.NotFound(id); }) .body(Todo.class);