一、统一响应结果的必要性
大家有没有发现一个问题,我们在前面所编写的这些Controller方法中,返回值各种各样,没有任何的规范。
如果我们开发一个大型项目,项目中controller方法将成千上万,使用上述方式将造成整个项目难以维护。那在真实的项目开发中是什么样子的呢?
在真实的项目开发中,无论是哪种方法,我们都会定义一个统一的返回结果。方案如下:
前端:只需要按照统一格式的返回结果进行解析(仅一种解析方案),就可以拿到数据。
统一的返回结果使用类来描述,在这个结果中包含:
-
响应状态码:当前请求是成功,还是失败
-
状态码信息:给页面的提示信息
-
返回的数据:给前端响应的数据(字符串、对象、集合)
定义在一个实体类Result来包含以上信息。代码如下:
public class Result {
private Integer code;//响应码,1 代表成功; 0 代表失败
private String msg; //响应码 描述字符串
private Object data; //返回的数据
public Result() { }
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
//增删改 成功响应(不需要给前端返回数据)
public static Result success(){
return new Result(1,"success",null);
}
//查询 成功响应(把查询结果做为返回数据响应给前端)
public static Result success(Object data){
return new Result(1,"success",data);
}
//失败响应
public static Result error(String msg){
return new Result(0,msg,null);
}
}
二、代码展示
两种方法 一种是 return new Result(1,"success","hello word"); 还有一种是因为已经在Result类中定义了静态方法直接调用Result.success或者Result.error方法
package com.example.collor;
import com.example.huang.Ex1;
import com.example.huang.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class Repon {
@RequestMapping("/hello")
//1 响应字符串
public Result hello(){
System.out.println("hello word");
// return new Result(1,"success","hello word");
return Result.success("hello");
}
//2 响应实体对象
@RequestMapping("/ex1")
public Result ex1(){
Ex1 ex1=new Ex1();
ex1.setSheng("河南");
ex1.setShi("商丘");
return Result.success(ex1);
}
//3 响应集合对象
@RequestMapping("/method")
public Result method(){
List<Ex1> list=new ArrayList();
Ex1 ex1=new Ex1();
ex1.setSheng("河南");
ex1.setShi("商丘");
Ex1 ex2=new Ex1();
ex2.setSheng("河北");
ex2.setShi("上海");
list.add(ex1);
list.add(ex2);
return Result.success(list);
}
}