From 0ba7b98ef0c94d1478cdd5b0643dab4974a7c538 Mon Sep 17 00:00:00 2001 From: dayaelee Date: Sat, 3 Aug 2024 21:15:53 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[8=EC=9B=94=201=EC=9D=BC=20=EC=88=99?= =?UTF-8?q?=EC=A0=9C]spring-mvc-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cholog/MemberController.java | 23 +++++++++++++++---- .../resources/static/{hi.html => index.html} | 0 .../{templates => static}/static.html | 0 3 files changed, 19 insertions(+), 4 deletions(-) rename spring-mvc-1/initial/src/main/resources/static/{hi.html => index.html} (100%) rename spring-mvc-1/initial/src/main/resources/{templates => static}/static.html (100%) diff --git a/spring-mvc-1/initial/src/main/java/cholog/MemberController.java b/spring-mvc-1/initial/src/main/java/cholog/MemberController.java index 08322a4e..3a12f651 100644 --- a/spring-mvc-1/initial/src/main/java/cholog/MemberController.java +++ b/spring-mvc-1/initial/src/main/java/cholog/MemberController.java @@ -1,18 +1,33 @@ package cholog; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; @Controller public class MemberController { - - public String world() { + @GetMapping("/hello") + public String world(@RequestParam(name = "name", required = false) String name, Model model) { // TODO: /hello 요청 시 resources/templates/static.html 페이지가 응답할 수 있도록 설정하세요. // TODO: 쿼리 파라미터로 name 요청이 들어왔을 때 해당 값을 hello.html에서 사용할 수 있도록 하세요. - return null; + if (name == null){ + // 쿼리 파라미터가 없는 경우 + return "static"; + } else { + // 쿼리 파라미터가 있는 경우 + model.addAttribute("name", name); + return "hello"; + } + + } + @GetMapping("/json") + @ResponseBody public Person json() { // TODO: /json 요청 시 {"name": "brown", "age": 20} 데이터를 응답할 수 있도록 설정하세요. - return null; + return new Person("brown", 20); } } diff --git a/spring-mvc-1/initial/src/main/resources/static/hi.html b/spring-mvc-1/initial/src/main/resources/static/index.html similarity index 100% rename from spring-mvc-1/initial/src/main/resources/static/hi.html rename to spring-mvc-1/initial/src/main/resources/static/index.html diff --git a/spring-mvc-1/initial/src/main/resources/templates/static.html b/spring-mvc-1/initial/src/main/resources/static/static.html similarity index 100% rename from spring-mvc-1/initial/src/main/resources/templates/static.html rename to spring-mvc-1/initial/src/main/resources/static/static.html From 257d8a7528ca091d0a2542eeea3aae681bea82bc Mon Sep 17 00:00:00 2001 From: "DESKTOP-J6GSER3\\user" Date: Mon, 5 Aug 2024 18:35:07 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[spring-mvc-1]=20ivy.lee(=EC=9D=B4=EB=8B=A4?= =?UTF-8?q?=EC=98=88)=20=EA=B3=BC=EC=A0=9C=20=EC=A0=9C=EC=B6=9C=ED=95=A9?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-mvc-1/initial/src/main/java/cholog/MemberController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-mvc-1/initial/src/main/java/cholog/MemberController.java b/spring-mvc-1/initial/src/main/java/cholog/MemberController.java index 3a12f651..0a8199d8 100644 --- a/spring-mvc-1/initial/src/main/java/cholog/MemberController.java +++ b/spring-mvc-1/initial/src/main/java/cholog/MemberController.java @@ -16,7 +16,7 @@ public String world(@RequestParam(name = "name", required = false) String name, // 쿼리 파라미터가 없는 경우 return "static"; } else { - // 쿼리 파라미터가 있는 경우 + // 쿼리 파라미터가 있는 경우. model.addAttribute("name", name); return "hello"; } From 18c9ca4830463f3123e90d52533b449012173af7 Mon Sep 17 00:00:00 2001 From: "DESKTOP-J6GSER3\\user" Date: Mon, 5 Aug 2024 21:25:58 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[spring-mvc-2]=20ivy.lee(=EC=9D=B4=EB=8B=A4?= =?UTF-8?q?=EC=98=88)=20=EA=B3=BC=EC=A0=9C=20=EC=A0=9C=EC=B6=9C=ED=95=A9?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cholog/MemberController.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/spring-mvc-2/initial/src/main/java/cholog/MemberController.java b/spring-mvc-2/initial/src/main/java/cholog/MemberController.java index 5a380e7a..927d98a4 100644 --- a/spring-mvc-2/initial/src/main/java/cholog/MemberController.java +++ b/spring-mvc-2/initial/src/main/java/cholog/MemberController.java @@ -5,12 +5,11 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicLong; + +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.*; @Controller public class MemberController { @@ -19,9 +18,9 @@ public class MemberController { private final AtomicLong index = new AtomicLong(1); @PostMapping("/members") - public ResponseEntity create() { + public ResponseEntity create(@RequestBody Member member) { // TODO: member 정보를 받아서 생성한다. - Member newMember = Member.toEntity(null, index.getAndIncrement()); + Member newMember = Member.toEntity(member, index.getAndIncrement()); members.add(newMember); return ResponseEntity.created(URI.create("/members/" + newMember.getId())).build(); } @@ -29,31 +28,32 @@ public ResponseEntity create() { @GetMapping("/members") public ResponseEntity> read() { // TODO: 저장된 모든 member 정보를 반환한다. - return null; + return new ResponseEntity<>(members, HttpStatus.OK); } @PutMapping("/members/{id}") - public ResponseEntity update() { + public ResponseEntity update(@PathVariable Long id, @RequestBody Member newMember) { // TODO: member의 수정 정보와 url 상의 id 정보를 받아 member 정보를 수정한다. Member member = members.stream() - .filter(it -> Objects.equals(it.getId(), null)) + .filter(it -> Objects.equals(it.getId(), id)) .findFirst() .orElseThrow(RuntimeException::new); - member.update(null); + member.update(newMember); + //return new ResponseEntity<>(null, HttpStatus.NO_CONTENT); 이건 왜 안되는지? return null; } @DeleteMapping("/members/{id}") - public ResponseEntity delete() { + public ResponseEntity delete(@PathVariable Long id) { // TODO: url 상의 id 정보를 받아 member를 삭제한다. Member member = members.stream() - .filter(it -> Objects.equals(it.getId(), null)) + .filter(it -> Objects.equals(it.getId(), id)) .findFirst() .orElseThrow(RuntimeException::new); members.remove(member); - return null; + return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } From 1a44ec75fc434d87a4072a9d33ff0acb93c11727 Mon Sep 17 00:00:00 2001 From: dayaelee Date: Mon, 2 Sep 2024 16:51:15 +0900 Subject: [PATCH 4/7] Feat:2. RestTemplate --- .../initial/src/main/java/cholog/Todo.java | 4 ++++ .../cholog/TodoClientWithRestTemplate.java | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 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..abc5bdfb 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,6 +3,10 @@ public class Todo { // TODO: Todo 객체가 가지는 필드들을 정의 + private String userId; + private String id; + private String title; + private Boolean completed; public String getTitle() { return null; 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..6c457780 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,5 +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; public class TodoClientWithRestTemplate { @@ -10,8 +13,18 @@ public TodoClientWithRestTemplate(RestTemplate restTemplate) { } public Todo getTodoById(Long id) { - // TODO: restTemplate을 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); + try{ + String Url = "http://jsonplaceholder.typicode.com/todos/1"; + ResponseEntity result + = restTemplate.getForEntity(Url+"/{id}", Todo.class); + return result.getBody(); + } catch (HttpClientErrorException e){ + if (e.getStatusCode() == HttpStatus.NOT_FOUND){ + throw new TodoException.NotFound(id); + } + throw new TodoException("Todo with id: " + id + "not found"); + + } + } } From 4ad0fbb747a94d4a8faae464b3b6e85dcba1f40d Mon Sep 17 00:00:00 2001 From: dayaelee Date: Mon, 2 Sep 2024 17:11:39 +0900 Subject: [PATCH 5/7] =?UTF-8?q?Feat:3-1.=20GET=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=ED=95=98=EA=B8=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, 7 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 ab2b6f5c..e46410f3 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 org.springframework.web.client.RestClient; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -13,8 +14,12 @@ public TodoClientWithRestClient(RestClient restClient) { } public List getTodos() { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo 리스트로 변환하여 반환 - return Collections.emptyList(); + Todo[] result = restClient.get() + .uri("http://jsonplaceholder.typicode.com/todos") + .retrieve() + .body(Todo[].class); + + return Arrays.asList(result); } public Todo getTodoById(Long id) { From 6dd80676263d4ab8964e2f7c693bb3fcbf542b4c Mon Sep 17 00:00:00 2001 From: dayaelee Date: Mon, 2 Sep 2024 17:29:14 +0900 Subject: [PATCH 6/7] =?UTF-8?q?Feat:3-2.=20GET=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EC=9D=98=20=EC=9D=91=EB=8B=B5=20=EB=B3=80=ED=99=98=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Todo.java | 32 +++++++++++++++++-- .../java/cholog/TodoClientWithRestClient.java | 10 ++++-- 2 files changed, 36 insertions(+), 6 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 abc5bdfb..39130861 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,12 +3,38 @@ public class Todo { // TODO: Todo 객체가 가지는 필드들을 정의 - private String userId; - private String id; + private Long userId; + private Long id; private String title; private Boolean completed; + public Long getUserId() { + return userId; + } + public Long getId() { + return id; + } public String getTitle() { - return null; + return title; + } + public Boolean getCompleted() { + return completed; + } + + // Setters + public void setUserId(Long userId) { + this.userId = userId; + } + + public void setId(Long id) { + this.id = id; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setCompleted(Boolean completed) { + this.completed = completed; } } 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 e46410f3..efe56982 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 @@ -23,8 +23,12 @@ public List getTodos() { } public Todo getTodoById(Long id) { - // TODO: restClient의 get 메서드를 사용하여 요청을 보내고 결과를 Todo로 변환하여 반환 - // TODO: 존재하지 않는 id로 요청을 보낼 경우 TodoException.NotFound 예외를 던짐 - return new Todo(); + + Todo result = restClient.get() + .uri("http://jsonplaceholder.typicode.com/todos/{id}", id) + .retrieve() + .body(Todo.class); + + return result; } } From ab4011db188e7bf49fbc9c7eb5fce4c42b07d320 Mon Sep 17 00:00:00 2001 From: dayaelee Date: Mon, 2 Sep 2024 17:35:40 +0900 Subject: [PATCH 7/7] =?UTF-8?q?Feat:3-3.=20=EC=98=88=EC=99=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= 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 efe56982..5a2245d5 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,6 @@ package cholog; +import org.springframework.http.HttpStatusCode; import org.springframework.web.client.RestClient; import java.util.Arrays; @@ -27,6 +28,9 @@ public Todo getTodoById(Long id) { Todo result = restClient.get() .uri("http://jsonplaceholder.typicode.com/todos/{id}", id) .retrieve() + .onStatus(status -> status.value() == 404, (req, res) -> { + throw new TodoException.NotFound(id); + }) .body(Todo.class); return result;