项目中我们会将响应封装成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();
}
}
浙公网安备 33010602011771号