项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。

定义统一结果:

{
  "success": 布尔, //响应是否成功
  "code": 数字, //响应码
  "message": 字符串, //返回消息
  "data": HashMap //返回数据,放在键值对中
}

 

具体操作:

1、在common模块下创建子模块common-utils(Maven工程)

2、创建interface,定义数据返回状态码

     ① 成功  20000   ②失败 20001

     在【子模块common-utils】的java包中添加【com.leavescai7.commonutils】包,创建接口 ResultCode.java

 

public interface ResultCode {

    public static Integer SUCCESS = 20000;  //成功
    public static Integer ERROR = 20001;  //失败

}

 

3、定义返回数据格式

      在【子模块common-utils】的java包中添加【com.leavescai7.commonutils】包,创建类 R.java

//统一返回结果的类
@Data
public class R {

  @ApiModelProperty(value = "是否成功")  //swagger注解
  private Boolean success;
  @ApiModelProperty(value = "返回码")
  private Integer code;
  @ApiModelProperty(value = "返回消息")
  private String message;
  @ApiModelProperty(value = "返回数据")
  private Map<String, Object> data = new HashMap<String, Object>();

  //把构造方法私有
  private R(){}

  //成功静态方法
  public static R ok(){
      R r = new R();
      r.setSuccess(true);
      r.setCode(ResultCode.SUCCESS);
      r.setMessage("成功");
      return r;
  }

  //失败静态方法
  public static R error(){
      R r = new R();
      r.setSuccess(false);
      r.setCode(ResultCode.ERROR);
      r.setMessage("失败");
      return r;
  }

  public R success(Boolean success){
      this.setSuccess(success);
      return this;
  }

  public R message(String message){
      this.setMessage(message);
      return this;
  }

  public R code(Integer code){
      this.setCode(code);
      return this;
  }

  public R data(String key, Object value){
      this.data.put(key, value);
      return this;
  }

  public R data(Map<String, Object> map){
      this.setData(map);
      return this;
  }
}

注意:上面的 return this; 表示返回的是这个类R的对象。方面后面可以 点【.】出这些方法。  链式编程

4、使用 统一返回结果

     ①在service模块中使用,所以在service模块pom文件中引入

<dependency>
    <groupId>com.leavescai7</groupId>
    <artifactId>common_utils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

     ②修改Controller中的返回结果   

//列表
@ApiOperation(value = "所有讲师列表") @GetMapping public R list(){ List<Teacher> list = teacherService.list(null); return R.ok().data("items", list); //链式编程 }
//删除
@ApiOperation(value = "根据ID删除讲师")
@DeleteMapping("{id}")
public R removeTeacher(
    @ApiParam(name = "id", value = "讲师ID", required = true)
    @PathVariable String id){
    boolean flag = teacherService.removeById(id);
    if(flag){
return R.ok();
}else{
return R.error();
}
}

 

posted on 2020-11-23 17:04  LeavesCai7  阅读(470)  评论(0)    收藏  举报