1.创建公共工具项目
1.1创建子子模块common_utils
2.完成对指定结果的编写
数据格式如下
{
"success": true,
"code": 20000,
"message": "成功",
"data": {
"items": [
{
"id": "1",
"name": "刘德华",
"intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
}
]
}
}
2.1定义接口,实现返回状态码
定义20000表示成功,20001表示失败
因为状态码是固定的,在接口里定义两个状态码
package com.neusoft.commonutils;
public interface ResultCode {
public static Integer SUCCESS = 20000;//成功
public static Integer ERROR = 20001;//失败
}
2.2创建返回类,定义属性
创建一个返回类,先定义四个属性(别忘了加@Data注解)
参考下图
@ApiModelProperty(value = "是否成功")
private Boolean success;
@ApiModelProperty(value = "返回码")
private Integer code;
@ApiModelProperty(value = "返回消息")
private String message;
@ApiModelProperty(value = "返回数据")
private Map<String, Object> data = new HashMap<String, Object>();
2.3 R的构造方法私有化
和状态码类似,返回的结果也是固定的
要么是ok里边内容固定,要么失败error
这种方法,别人不能new R的对象。只能使用public static R定义的方法。
即只能使用error和ok这两个静态方法
在静态方法里,本身你在R这个类,自己可以new R对象。
然后通过new的对象,把R的属性进行set设置。set完之后return set完的对象。
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;
}
2.4实现链式编程
因为上边ok和error返回的都是R对象
然后我又定义的方法也是返回R对象,即public R 方法名(return r)
前边是R对象,R这个类有这些方法(ok、error、success、message、code、data)。
他的对象就可以调用这些方法,且每个方法都返回这个对象。
正常调用类的方法是对象.方法
但是这个链式编程是对象.方法(返回对象)还可以继续.方法(返回对象)
相当于 方法(返回对象).方法(返回对象).方法(返回对象)
return this可以理解为当前类的对象(谁调用这个方法,就代表谁)
R的完整内容
@Data
public class R {
@ApiModelProperty(value = "是否成功")
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;
}
}
3.测试统一结果
3.1把common_utils引入到service中
3.2在controller中把返回的结果都换成R结果
@GetMapping("findAll")
public R findAllteacher(){
List<EduTeacher> list = eduTeacherService.list(null);
return R.ok().data("items",list);
}
//2逻辑删除讲师
@DeleteMapping("{id}")
public R remocveTeacher(@PathVariable String id){
//.var
boolean b = eduTeacherService.removeById(id);
if(b){
return R.ok();
}else {
return R.error();
}
}
3.3使用swagger进行测试,查看返回结果
http://localhost:8001/swagger-ui.html