Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
### 作业描述

#### 切换到课程对应的分支查看每节课的作业要求
* Routing: routing
* Data Binding: data-binding
* Validation: validation
* Customised Response: customize-response
* Error Handling: error-handling

<span style="color: red"> 注意:最终需要将改动合并到master分支 </span>

* 将所有接口的返回值都替换成使用ResponseEntity
* 所有post请求都返回201,并且返回的头部带上index字段(值为创建的资源在列表中的位置:eg: 添加的热搜事件在列表中的index)
* 完成demo里的练习:get /rs/list和 get/rs/{index}接口返回的数据中不包含user字段
* 添加获取所有用户的接口: get /users,期望返回的数据格式例子:
```
[{
"user_name": "xxxx",
"user_age": 19,
"user_gender": "female",
"user_email": "xxx@xx",
"user_phone": "1xxxxxxxxxx"
}]
* 先写测试!!!
* hint: @JsonpProperty的使用
5 changes: 5 additions & 0 deletions git status
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
* customize-response
data-binding
master
vaildation
validation
79 changes: 77 additions & 2 deletions src/main/java/com/thoughtworks/rslist/api/RsController.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,86 @@
package com.thoughtworks.rslist.api;

import com.thoughtworks.rslist.domain.User;
import com.thoughtworks.rslist.exception.Error;
import com.thoughtworks.rslist.exception.RsEventNotValidException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
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 com.fasterxml.jackson.core.JsonProcessingException;
import com.thoughtworks.rslist.domain.RsEvent;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import javax.validation.Valid;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;

@RestController
public class RsController {
private List<String> rsList = Arrays.asList("第一条事件", "第二条事件", "第三条事件");
private List<RsEvent> rsList = initRsEventList();
private List<RsEvent> initRsEventList(){
List<RsEvent> rsEventList = new ArrayList<>();
User user = new User("lyx","female",18,"1@2.com","12222222222");
rsEventList.add(new RsEvent("第一条事件","无标签",user));
rsEventList.add(new RsEvent("第二条事件","无标签",user));
rsEventList.add(new RsEvent("第三条事件","无标签",user));
return rsEventList;
}

@GetMapping("/rs/{index}")
public ResponseEntity getOneRsEvent(@PathVariable int index){
if (index <= 0 || index > rsList.size()){
throw new RsEventNotValidException("invalid index");
}
return ResponseEntity.ok(rsList.get(index -1));
}

@GetMapping("/rs/list")
public ResponseEntity getRsEventBetween(@RequestParam(required = false) Integer start,@RequestParam(required = false) Integer end){
if(start == null || end == null){
return ResponseEntity.ok(rsList);
}
if((end - start +1) >rsList.size() || start > rsList.size()){
throw new RsEventNotValidException("invalid request param");
}
return ResponseEntity.ok(rsList.subList(start - 1,end));
}

@PostMapping("/rs/event")
public ResponseEntity<Object> addRsEvent(@RequestBody @Valid RsEvent rsEvent) throws JsonProcessingException {
rsList.add(rsEvent);
return ResponseEntity.created(null).build();
}

@DeleteMapping ("/rs/{index}")
public ResponseEntity deleteRsEvent(@PathVariable int index) {
rsList.remove(index-1);
return ResponseEntity.ok(rsList.remove(index-1));

}

@PatchMapping("/rs/{index}")
public ResponseEntity modifyRsEvent(@PathVariable int index,@RequestBody RsEvent rsEvent ) {
String eventName = rsEvent.getEventName();
String keyWord = rsEvent.getKeyWord();
rsList.get(index - 1).setEventName(eventName);
rsList.get(index - 1).setKeyWord(keyWord);
return ResponseEntity.ok(null);
}

@ExceptionHandler({RsEventNotValidException.class, MethodArgumentNotValidException.class})
public ResponseEntity rsExceptionHandler (Exception e){
String errorMessage;
if(e instanceof MethodArgumentNotValidException){
errorMessage = "invalid param";
}else {
errorMessage = e.getMessage();
}
Error error = new Error();
error.setError(errorMessage);
return ResponseEntity.badRequest().body(error);
}
}
42 changes: 42 additions & 0 deletions src/main/java/com/thoughtworks/rslist/api/UserController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.thoughtworks.rslist.api;

import com.thoughtworks.rslist.domain.User;
import com.thoughtworks.rslist.exception.Error;
import com.thoughtworks.rslist.exception.RsEventNotValidException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController{
List<User> userList = new ArrayList<>();

@PostMapping("/user")
public ResponseEntity addUser(@RequestBody @Valid User user){
userList.add(user);
return ResponseEntity.created(null).build();
}

@GetMapping("/user")
public List<User> getUserList(){
return userList;
}

@ExceptionHandler({RsEventNotValidException.class, MethodArgumentNotValidException.class})
public ResponseEntity rsExceptionHandler (Exception e){
String errorMessage;
if(e instanceof MethodArgumentNotValidException){
errorMessage = "invalid user";
}else {
errorMessage = e.getMessage();
}
Error error = new Error();
error.setError(errorMessage);
return ResponseEntity.badRequest().body(error);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.thoughtworks.rslist.component;

import com.thoughtworks.rslist.exception.Error;
import com.thoughtworks.rslist.exception.RsEventNotValidException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;

public class RsEventHandler {
@ExceptionHandler({RsEventNotValidException.class, MethodArgumentNotValidException.class})
public ResponseEntity rsExceptionHandler (Exception e){
String errorMessage;
if(e instanceof MethodArgumentNotValidException){
errorMessage = "invalid param";
}else {
errorMessage = e.getMessage();
}
Error error = new Error();
error.setError(errorMessage);
return ResponseEntity.badRequest().body(error);
}
}
48 changes: 48 additions & 0 deletions src/main/java/com/thoughtworks/rslist/domain/RsEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.thoughtworks.rslist.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.validation.Valid;

@Valid
public class RsEvent {
private String eventName;
private String keyWord;
@Valid
private User user;

public RsEvent(String eventName,String keyWord,User user){
this.eventName = eventName;
this.keyWord = keyWord;
this.user = user;
}

public RsEvent(){
}

public User getUser() {
return user;
}

@JsonProperty
public void setUser(User user) {
this.user = user;
}

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;
}
}
76 changes: 76 additions & 0 deletions src/main/java/com/thoughtworks/rslist/domain/User.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/thoughtworks/rslist/exception/Error.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.thoughtworks.rslist.exception;


public class Error {
private String error;

public String getError() {
return error;
}

public void setError(String error) {
this.error = error;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.thoughtworks.rslist.exception;

public class RsEventNotValidException extends RuntimeException{
private String errorMessage;

public RsEventNotValidException( String errorMessage) {
this.errorMessage = errorMessage;
}

@Override
public String getMessage() {
return errorMessage;
}
}
Loading