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/TodoClientWithRestClient.java b/spring-http-client-1/initial/src/main/java/cholog/TodoClientWithRestClient.java index ab2b6f5c..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 @@ -1,5 +1,8 @@ package cholog; +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; @@ -13,13 +16,19 @@ 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) { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); + return restClient.get() + .uri("/todos/{todoId}", id) + .retrieve() + .onStatus(HttpStatusCode::is4xxClientError, (request, response) -> { + throw new TodoException.NotFound(id); + }) + .body(Todo.class); } } 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..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,12 @@ 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; + +import java.net.URI; public class TodoClientWithRestTemplate { private final RestTemplate restTemplate; @@ -10,8 +16,16 @@ 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); + + try { + return restTemplate.getForEntity(uri, Todo.class).getBody(); + } catch (HttpClientErrorException e) { + throw new TodoException.NotFound(id); + } } }