From 43de649491072e669f93ae965dde611faa566587 Mon Sep 17 00:00:00 2001 From: idolice <349031587@qq.com> Date: Mon, 25 May 2020 11:18:45 +0800 Subject: [PATCH 1/9] data-binding --- README.md | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d423f9d7..8188e8b4 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,20 @@ ### 作业描述 -#### 切换到课程对应的分支查看每节课的作业要求 -* Routing: routing -* Data Binding: data-binding -* Validation: validation -* Customised Response: customize-response -* Error Handling: error-handling - - 注意:最终需要将改动合并到master分支 +根据课堂上的demo,完成下面需求 +1. 提供获取某一条热搜事件的接口 +2. 提供能够根据起始参数,获取对应范围内的热搜事件列表的接口 +3. 提供添加热搜事件的接口(事件包含两个字段:事件名称和关键字) +4. 提供修改某条热搜事件的接口(demo没有展示,请大家自己完成) +5. 提供删除某条热搜事件的接口(demo没有展示,请大家自己完成) + +#### 需求4、5详细描述 + +* 需求4: 修改某条事件时(通过参数传递的序号,修改列表中对应的事件数据),如果RequestBody只传了eventName没有传keyword那么仅仅只修改eventName + 如果只传了keyword没有传eventName,那么只修改keyword字段 + 如果两个字段都传了,那么都进行修改 + +* 需求5: 通过参数传递的序号,删除列表中对应的某条事件数据 + + + 注意:所有的需求都请先写测试再写实现 From 080e6c25e7a67fdd3015234f687f45e8834930f2 Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Tue, 15 Sep 2020 18:17:22 +0800 Subject: [PATCH 2/9] getOneRsEvent and getRSEvent --- .../thoughtworks/rslist/api/RsController.java | 21 +++++++++++- .../rslist/api/RsControllerTest.java | 34 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java diff --git a/src/main/java/com/thoughtworks/rslist/api/RsController.java b/src/main/java/com/thoughtworks/rslist/api/RsController.java index 6899e4de..1ed72329 100644 --- a/src/main/java/com/thoughtworks/rslist/api/RsController.java +++ b/src/main/java/com/thoughtworks/rslist/api/RsController.java @@ -1,5 +1,8 @@ package com.thoughtworks.rslist.api; +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 java.util.Arrays; @@ -7,5 +10,21 @@ @RestController public class RsController { - private List rsList = Arrays.asList("第一条事件", "第二条事件", "第三条事件"); + private List rsList = Arrays.asList("第一条事件","第二条事件","第三条事件"); + + // @GetMapping("/rs/list") +// public String getRslist(){ +// return rsList.toString(); +// } + @GetMapping("/rs/{index}") + public String getOneRsEvent(@PathVariable int index){ + return rsList.get(index -1); + } + @GetMapping("/rs/list") + public String getRsEventBetween(@RequestParam(required = false) Integer start,@RequestParam(required = false) Integer end){ + if(start == null || end == null){ + return rsList.toString(); + } + return rsList.subList(start-1,end).toString(); + } } diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java new file mode 100644 index 00000000..470108bd --- /dev/null +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -0,0 +1,34 @@ +package com.thoughtworks.rslist.api; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +public class RsControllerTest { + @Autowired + MockMvc mockMvc; + @Test + public void should_get_rs_event_list() throws Exception{ + mockMvc.perform(get("/rs/list")).andExpect(content().string("[第一条事件, 第二条事件, 第三条事件]")) + .andExpect(status().isOk()); + } + + @Test + public void should_get_one_rs_event() throws Exception{ + mockMvc.perform(get("/rs/1")).andExpect(content().string("第一条事件")) + .andExpect(status().isOk()); + } + @Test + public void should_get_rs_event_between() throws Exception{ + mockMvc.perform(get("/rs/list?start=1&end=2")).andExpect(content().string("[第一条事件, 第二条事件]")) + .andExpect(status().isOk()); + } +} From 7708f2f103a895f3183454250caaddcd529ee169 Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Tue, 15 Sep 2020 18:53:42 +0800 Subject: [PATCH 3/9] refactoring --- .../thoughtworks/rslist/api/RsController.java | 19 ++++++-- .../thoughtworks/rslist/domain/RsEvent.java | 27 +++++++++++ .../rslist/api/RsControllerTest.java | 48 +++++++++++++++++-- 3 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/thoughtworks/rslist/domain/RsEvent.java diff --git a/src/main/java/com/thoughtworks/rslist/api/RsController.java b/src/main/java/com/thoughtworks/rslist/api/RsController.java index 1ed72329..6d83807d 100644 --- a/src/main/java/com/thoughtworks/rslist/api/RsController.java +++ b/src/main/java/com/thoughtworks/rslist/api/RsController.java @@ -1,30 +1,39 @@ package com.thoughtworks.rslist.api; +import com.thoughtworks.rslist.domain.RsEvent; 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 java.util.ArrayList; import java.util.Arrays; import java.util.List; @RestController public class RsController { - private List rsList = Arrays.asList("第一条事件","第二条事件","第三条事件"); + private List rsList = initRsEventList(); + private List initRsEventList(){ + List rsEventList = new ArrayList<>(); + rsEventList.add(new RsEvent("第一条事件","无标签")); + rsEventList.add(new RsEvent("第二条事件","无标签")); + rsEventList.add(new RsEvent("第三条事件","无标签")); + return rsEventList; + } // @GetMapping("/rs/list") // public String getRslist(){ // return rsList.toString(); // } @GetMapping("/rs/{index}") - public String getOneRsEvent(@PathVariable int index){ + public RsEvent getOneRsEvent(@PathVariable int index){ return rsList.get(index -1); } @GetMapping("/rs/list") - public String getRsEventBetween(@RequestParam(required = false) Integer start,@RequestParam(required = false) Integer end){ + public List getRsEventBetween(@RequestParam(required = false) Integer start,@RequestParam(required = false) Integer end){ if(start == null || end == null){ - return rsList.toString(); + return rsList; } - return rsList.subList(start-1,end).toString(); + return rsList.subList(start-1,end); } } diff --git a/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java b/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java new file mode 100644 index 00000000..81eea6bc --- /dev/null +++ b/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java @@ -0,0 +1,27 @@ +package com.thoughtworks.rslist.domain; + +public class RsEvent { + private String eventName; + private String keyWord; + + public RsEvent(String eventName,String keyWord){ + this.eventName = eventName; + this.keyWord = keyWord; + } + + public String getKeyWord() { + return keyWord; + } + + public void setKeyWord(String keyWord) { + this.keyWord = keyWord; + } + + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } +} diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java index 470108bd..6eea3084 100644 --- a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -6,9 +6,10 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.web.servlet.MockMvc; +import static org.hamcrest.Matchers.hasSize; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.hamcrest.Matchers.is; @SpringBootTest @AutoConfigureMockMvc @@ -17,18 +18,55 @@ public class RsControllerTest { MockMvc mockMvc; @Test public void should_get_rs_event_list() throws Exception{ - mockMvc.perform(get("/rs/list")).andExpect(content().string("[第一条事件, 第二条事件, 第三条事件]")) + mockMvc.perform(get("/rs/list")).andExpect(jsonPath("$",hasSize(3))) + .andExpect(jsonPath("$[0].eventName",is("第一条事件"))) + .andExpect(jsonPath("$[0].keyWord",is("无标签"))) + .andExpect(jsonPath("$[1].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[1].keyWord",is("无标签"))) + .andExpect(jsonPath("$[2].eventName",is("第三条事件"))) + .andExpect(jsonPath("$[2].keyWord",is("无标签"))) .andExpect(status().isOk()); } @Test public void should_get_one_rs_event() throws Exception{ - mockMvc.perform(get("/rs/1")).andExpect(content().string("第一条事件")) + mockMvc.perform(get("/rs/1")) + .andExpect(jsonPath("$.eventName",is("第一条事件"))) + .andExpect(jsonPath("$.keyWord",is("无标签"))) + .andExpect(status().isOk()); + mockMvc.perform(get("/rs/2")) + .andExpect(jsonPath("$.eventName",is("第二条事件"))) + .andExpect(jsonPath("$.keyWord",is("无标签"))) + .andExpect(status().isOk()); + mockMvc.perform(get("/rs/3")) + .andExpect(jsonPath("$.eventName",is("第三条事件"))) + .andExpect(jsonPath("$.keyWord",is("无标签"))) .andExpect(status().isOk()); } @Test public void should_get_rs_event_between() throws Exception{ - mockMvc.perform(get("/rs/list?start=1&end=2")).andExpect(content().string("[第一条事件, 第二条事件]")) + mockMvc.perform(get("/rs/list?start=1&end=2")) + .andExpect(jsonPath("$",hasSize(2))) + .andExpect(jsonPath("$[0].eventName",is("第一条事件"))) + .andExpect(jsonPath("$[0].keyWord",is("无标签"))) + .andExpect(jsonPath("$[1].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[1】.keyWord",is("无标签"))) + .andExpect(status().isOk()); + mockMvc.perform(get("/rs/list?start=2&end=3")) + .andExpect(jsonPath("$",hasSize(2))) + .andExpect(jsonPath("$[0].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[0].keyWord",is("无标签"))) + .andExpect(jsonPath("$[1].eventName",is("第三条事件"))) + .andExpect(jsonPath("$[1】.keyWord",is("无标签"))) + .andExpect(status().isOk()); + mockMvc.perform(get("/rs/list?start=1&end=3")) + .andExpect(jsonPath("$",hasSize(3))) + .andExpect(jsonPath("$[0].eventName",is("第一条事件"))) + .andExpect(jsonPath("$[0].keyWord",is("无标签"))) + .andExpect(jsonPath("$[1].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[1】.keyWord",is("无标签"))) + .andExpect(jsonPath("$[2].eventName",is("第三条事件"))) + .andExpect(jsonPath("$[2】.keyWord",is("无标签"))) .andExpect(status().isOk()); } } From b19e522ffc0decf0683ac4d6410f2ae18df07436 Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Tue, 15 Sep 2020 19:25:49 +0800 Subject: [PATCH 4/9] add rs event --- .../thoughtworks/rslist/api/RsController.java | 19 ++++++++------- .../thoughtworks/rslist/domain/RsEvent.java | 4 ++++ .../rslist/api/RsControllerTest.java | 23 +++++++++++++++++++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/thoughtworks/rslist/api/RsController.java b/src/main/java/com/thoughtworks/rslist/api/RsController.java index 6d83807d..de836e09 100644 --- a/src/main/java/com/thoughtworks/rslist/api/RsController.java +++ b/src/main/java/com/thoughtworks/rslist/api/RsController.java @@ -1,10 +1,9 @@ package com.thoughtworks.rslist.api; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.thoughtworks.rslist.domain.RsEvent; -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.bind.annotation.*; import java.util.ArrayList; import java.util.Arrays; @@ -21,14 +20,11 @@ private List initRsEventList(){ return rsEventList; } - // @GetMapping("/rs/list") -// public String getRslist(){ -// return rsList.toString(); -// } @GetMapping("/rs/{index}") public RsEvent getOneRsEvent(@PathVariable int index){ return rsList.get(index -1); } + @GetMapping("/rs/list") public List getRsEventBetween(@RequestParam(required = false) Integer start,@RequestParam(required = false) Integer end){ if(start == null || end == null){ @@ -36,4 +32,11 @@ public List getRsEventBetween(@RequestParam(required = false) Integer s } return rsList.subList(start-1,end); } + + @PostMapping("/rs/event") + public void addRsEvent(@RequestBody String rsEvent) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + RsEvent event = objectMapper.readValue(rsEvent,RsEvent.class); + rsList.add(event); + } } diff --git a/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java b/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java index 81eea6bc..79d18026 100644 --- a/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java +++ b/src/main/java/com/thoughtworks/rslist/domain/RsEvent.java @@ -9,6 +9,10 @@ public RsEvent(String eventName,String keyWord){ this.keyWord = keyWord; } + public RsEvent(){ + + } + public String getKeyWord() { return keyWord; } diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java index 6eea3084..d2bb9a35 100644 --- a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -1,13 +1,17 @@ package com.thoughtworks.rslist.api; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.thoughtworks.rslist.domain.RsEvent; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.hasSize; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.hamcrest.Matchers.is; @@ -69,4 +73,23 @@ public void should_get_rs_event_between() throws Exception{ .andExpect(jsonPath("$[2】.keyWord",is("无标签"))) .andExpect(status().isOk()); } + @Test + public void should_add_rs_event() throws Exception{ + RsEvent rsEvent = new RsEvent("猪肉涨价了","经济"); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(rsEvent); + mockMvc.perform(post("/rs/event").content(jsonString).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + + mockMvc.perform(get("/rs/list")).andExpect(jsonPath("$",hasSize(4))) + .andExpect(jsonPath("$[0].eventName",is("第一条事件"))) + .andExpect(jsonPath("$[0].keyWord",is("无标签"))) + .andExpect(jsonPath("$[1].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[1].keyWord",is("无标签"))) + .andExpect(jsonPath("$[2].eventName",is("第三条事件"))) + .andExpect(jsonPath("$[2].keyWord",is("无标签"))) + .andExpect(jsonPath("$[3].eventName",is("猪肉涨价了"))) + .andExpect(jsonPath("$[3].keyWord",is("经济"))) + .andExpect(status().isOk()); + } } From 1cc3e4820ef17331f60a451a60424009d43aa7fb Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Tue, 15 Sep 2020 20:51:11 +0800 Subject: [PATCH 5/9] delete_rs_event --- .../com/thoughtworks/rslist/api/RsController.java | 7 +++++++ .../thoughtworks/rslist/api/RsControllerTest.java | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/com/thoughtworks/rslist/api/RsController.java b/src/main/java/com/thoughtworks/rslist/api/RsController.java index de836e09..e98b92ac 100644 --- a/src/main/java/com/thoughtworks/rslist/api/RsController.java +++ b/src/main/java/com/thoughtworks/rslist/api/RsController.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.UnaryOperator; @RestController public class RsController { @@ -39,4 +40,10 @@ public void addRsEvent(@RequestBody String rsEvent) throws JsonProcessingExcepti RsEvent event = objectMapper.readValue(rsEvent,RsEvent.class); rsList.add(event); } + + @PostMapping("/rs/{index}") + public void deleteRsEvent(@PathVariable int index) { + rsList.remove(index-1); + } + } diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java index d2bb9a35..a2231487 100644 --- a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -92,4 +92,19 @@ public void should_add_rs_event() throws Exception{ .andExpect(jsonPath("$[3].keyWord",is("经济"))) .andExpect(status().isOk()); } + + + @Test + public void should_delete_rs_event() throws Exception { + mockMvc.perform(post("/rs/1")).andExpect(status().isOk()); + + mockMvc.perform(get("/rs/list")).andExpect(jsonPath("$",hasSize(2))) + .andExpect(jsonPath("$[0].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[0].keyWord",is("无标签"))) + .andExpect(jsonPath("$[1].eventName",is("第三条事件"))) + .andExpect(jsonPath("$[1].keyWord",is("无标签"))) + .andExpect(status().isOk()); + + } + } From 0ddc03601661f45f9bfd8877b785abfa40b9642f Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Wed, 16 Sep 2020 05:49:57 +0800 Subject: [PATCH 6/9] modify rs's eventName and keyWord --- .../thoughtworks/rslist/api/RsController.java | 5 +++++ .../rslist/api/RsControllerTest.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/main/java/com/thoughtworks/rslist/api/RsController.java b/src/main/java/com/thoughtworks/rslist/api/RsController.java index e98b92ac..47b97486 100644 --- a/src/main/java/com/thoughtworks/rslist/api/RsController.java +++ b/src/main/java/com/thoughtworks/rslist/api/RsController.java @@ -46,4 +46,9 @@ public void deleteRsEvent(@PathVariable int index) { rsList.remove(index-1); } + @PostMapping("/rs/{index}") + public void modifyRsEvent(@PathVariable int index,@RequestBody(required = false) String eventName,@RequestBody String keyWord) { + + } + } diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java index a2231487..74dcbf4f 100644 --- a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -93,6 +93,28 @@ public void should_add_rs_event() throws Exception{ .andExpect(status().isOk()); } + @Test + public void should_modify_rs_event_eventName_and_keyWord() throws Exception { + String modifyString = "{\"eventName\":\"猪肉涨价了\",\"keyWord\":\"经济\"}"; + + + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(modifyString); + + mockMvc.perform(post("/rs/1").content(jsonString).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + + mockMvc.perform(get("/rs/list")).andExpect(jsonPath("$",hasSize(3))) + .andExpect(jsonPath("$[0].eventName",is("猪肉涨价了"))) + .andExpect(jsonPath("$[0].keyWord",is("经济"))) + .andExpect(jsonPath("$[1].eventName",is("第二条事件"))) + .andExpect(jsonPath("$[1].keyWord",is("无标签"))) + .andExpect(jsonPath("$[2].eventName",is("第三条事件"))) + .andExpect(jsonPath("$[2].keyWord",is("无标签"))) + .andExpect(status().isOk()); + + } + @Test public void should_delete_rs_event() throws Exception { From 2a0bed017f5841d55f2fb52d4cb43faefc0c2306 Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Wed, 16 Sep 2020 09:19:58 +0800 Subject: [PATCH 7/9] patch --- .../com/thoughtworks/rslist/api/RsController.java | 9 ++++----- .../thoughtworks/rslist/api/RsControllerTest.java | 13 +++++-------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/thoughtworks/rslist/api/RsController.java b/src/main/java/com/thoughtworks/rslist/api/RsController.java index 47b97486..ea546478 100644 --- a/src/main/java/com/thoughtworks/rslist/api/RsController.java +++ b/src/main/java/com/thoughtworks/rslist/api/RsController.java @@ -41,14 +41,13 @@ public void addRsEvent(@RequestBody String rsEvent) throws JsonProcessingExcepti rsList.add(event); } - @PostMapping("/rs/{index}") + @DeleteMapping ("/rs/{index}") public void deleteRsEvent(@PathVariable int index) { rsList.remove(index-1); } - @PostMapping("/rs/{index}") - public void modifyRsEvent(@PathVariable int index,@RequestBody(required = false) String eventName,@RequestBody String keyWord) { - + @PatchMapping("/rs/{index}") + public void modifyRsEvent(@PathVariable int index,@RequestBody RsEvent rsEvent ) { + rsList.set(index - 1,rsEvent); } - } diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java index 74dcbf4f..e7646ed6 100644 --- a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -10,8 +10,7 @@ import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.hasSize; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.hamcrest.Matchers.is; @@ -95,13 +94,11 @@ public void should_add_rs_event() throws Exception{ @Test public void should_modify_rs_event_eventName_and_keyWord() throws Exception { - String modifyString = "{\"eventName\":\"猪肉涨价了\",\"keyWord\":\"经济\"}"; - - + RsEvent rsEvent = new RsEvent("猪肉涨价了","经济"); ObjectMapper objectMapper = new ObjectMapper(); - String jsonString = objectMapper.writeValueAsString(modifyString); + String jsonString = objectMapper.writeValueAsString(rsEvent); - mockMvc.perform(post("/rs/1").content(jsonString).contentType(MediaType.APPLICATION_JSON)) + mockMvc.perform(patch("/rs/1").content(jsonString).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); mockMvc.perform(get("/rs/list")).andExpect(jsonPath("$",hasSize(3))) @@ -118,7 +115,7 @@ public void should_modify_rs_event_eventName_and_keyWord() throws Exception { @Test public void should_delete_rs_event() throws Exception { - mockMvc.perform(post("/rs/1")).andExpect(status().isOk()); + mockMvc.perform(delete("/rs/1")).andExpect(status().isOk()); mockMvc.perform(get("/rs/list")).andExpect(jsonPath("$",hasSize(2))) .andExpect(jsonPath("$[0].eventName",is("第二条事件"))) From e6f354814f4efe1e9b56fe6f57f03823f03da666 Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Wed, 16 Sep 2020 11:14:01 +0800 Subject: [PATCH 8/9] test environment --- .../java/com/thoughtworks/rslist/api/RsControllerTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java index e7646ed6..a9de3371 100644 --- a/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java +++ b/src/test/java/com/thoughtworks/rslist/api/RsControllerTest.java @@ -109,10 +109,8 @@ public void should_modify_rs_event_eventName_and_keyWord() throws Exception { .andExpect(jsonPath("$[2].eventName",is("第三条事件"))) .andExpect(jsonPath("$[2].keyWord",is("无标签"))) .andExpect(status().isOk()); - } - @Test public void should_delete_rs_event() throws Exception { mockMvc.perform(delete("/rs/1")).andExpect(status().isOk()); @@ -123,7 +121,6 @@ public void should_delete_rs_event() throws Exception { .andExpect(jsonPath("$[1].eventName",is("第三条事件"))) .andExpect(jsonPath("$[1].keyWord",is("无标签"))) .andExpect(status().isOk()); - } } From eb471709197ca7d533d887be8600d0ec95cb2195 Mon Sep 17 00:00:00 2001 From: liyixuan <13069579956@163.com> Date: Wed, 16 Sep 2020 15:11:46 +0800 Subject: [PATCH 9/9] add annotation --- .../rslist/api/UserController.java | 27 ++++++ .../com/thoughtworks/rslist/domain/User.java | 76 ++++++++++++++++ .../rslist/api/UserControllerTest.java | 89 +++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 src/main/java/com/thoughtworks/rslist/api/UserController.java create mode 100644 src/main/java/com/thoughtworks/rslist/domain/User.java create mode 100644 src/test/java/com/thoughtworks/rslist/api/UserControllerTest.java diff --git a/src/main/java/com/thoughtworks/rslist/api/UserController.java b/src/main/java/com/thoughtworks/rslist/api/UserController.java new file mode 100644 index 00000000..6d161428 --- /dev/null +++ b/src/main/java/com/thoughtworks/rslist/api/UserController.java @@ -0,0 +1,27 @@ +package com.thoughtworks.rslist.api; + +import com.thoughtworks.rslist.domain.User; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; + +@RestController +public class UserController{ + List userList = new ArrayList<>(); + + @PostMapping("/user") + public void addUser(@RequestBody @Valid User user){ + userList.add(user); + } + + @GetMapping("/user") + public List getUserList(){ + return userList; + } + +} \ No newline at end of file diff --git a/src/main/java/com/thoughtworks/rslist/domain/User.java b/src/main/java/com/thoughtworks/rslist/domain/User.java new file mode 100644 index 00000000..ca0e65a8 --- /dev/null +++ b/src/main/java/com/thoughtworks/rslist/domain/User.java @@ -0,0 +1,76 @@ +package com.thoughtworks.rslist.domain; + +import javax.validation.constraints.*; + +public class User { + @NotNull + @Size(max = 8) + private String name; + @NotNull + private String gender; + @NotNull + @Min(18) + @Max(100) + private int age; + @Email + private String email; + @Pattern(regexp = "1\\d{10}") + private String phone; + private int voteNum = 10; + + public User(String name, String gender, int age, String email, String phone) { + this.name = name; + this.gender = gender; + this.age = age; + this.email = email; + this.phone = phone; + } + + public String getName() { + return name; + } + + public void setName() { + this.name = name; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public int getVoteNum() { + return voteNum; + } + + public void setVoteNum(int voteNum) { + this.voteNum = voteNum; + } +} diff --git a/src/test/java/com/thoughtworks/rslist/api/UserControllerTest.java b/src/test/java/com/thoughtworks/rslist/api/UserControllerTest.java new file mode 100644 index 00000000..c848049e --- /dev/null +++ b/src/test/java/com/thoughtworks/rslist/api/UserControllerTest.java @@ -0,0 +1,89 @@ +package com.thoughtworks.rslist.api; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.thoughtworks.rslist.domain.RsEvent; +import com.thoughtworks.rslist.domain.User; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.Matchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@SpringBootTest +@AutoConfigureMockMvc +public class UserControllerTest { + @Autowired + MockMvc mockMvc; + + @Test + public void should_register_user() throws Exception { + User user = new User("lyx","female",18,"1@2.com","12222222222"); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(user); + mockMvc.perform(post("/user") + .content(jsonString) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + + mockMvc.perform(get("/user")) + .andExpect(jsonPath("$",hasSize(1))) + .andExpect(jsonPath("$[0].name",is("lyx"))) + .andExpect(jsonPath("$[0].gender",is("female"))) + .andExpect(jsonPath("$[0].age",is(18))) + .andExpect(jsonPath("$[0].email",is("1@2.com"))) + .andExpect(jsonPath("$[0].phone",is("12222222222"))) + .andExpect(status().isOk()); + } + + + @Test + public void name_should_less_than_8() throws Exception{ + User user = new User("lyx111111","female",18,"1@2.com","12222222222"); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(user); + mockMvc.perform(post("/user") + .content(jsonString) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + public void age_should_between_18_and_100() throws Exception{ + User user = new User("lyx","female",118,"1@2.com","12222222222"); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(user); + mockMvc.perform(post("/user") + .content(jsonString) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + public void email_should_right() throws Exception{ + User user = new User("lyx","female",28,".com","12222222222"); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(user); + mockMvc.perform(post("/user") + .content(jsonString) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + public void phone_should_right() throws Exception{ + User user = new User("lyx","female",28,".com","3312222222222"); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonString = objectMapper.writeValueAsString(user); + mockMvc.perform(post("/user") + .content(jsonString) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } +} \ No newline at end of file