springboot mybatis-plus统一结果返回如何实现

(1)统一返回是什么,为什么要设置统一返回

设置统一返回是为了后端在与前端数据交互的时候,传递的参数形式统一。比如:是否成功,返回码,返回信息,返回数据。

(2)统一返回一般放在哪比较好?

设置统一返回最好放到一个公共类中,以后只需调用这个公共类即可。

(3)统一返回是怎么实现的?

首先我们想为了实现统一返回,需要判断:

是否成功(true,false),

返回码(400,401,402,403,404.。。。。。若干),

返回信息(message),

返回数据(data)。

我们来想,这四项中,返回码的值得种类是最多的,而且不方便管理,所以我们Wie返回码写一个接口,以后就通过调用这个接口的点方法即可。

在common模块下,创建一个ResultCode接口

public interface ResultCode {

    public static Integer SUCCESS = 20000;//执行成功的返回码

    public static Integer ERROR = 20001;//执行失败的返回码
}

然后我们写一个统一结果返回类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;
    }
}

然后,我们在写controller类的时候,其方法的返回值就写R即可,下面以数据的增删改查,分页查询,分页查询带分页等进行演示。

特别说明,下面的删除操作的请求方式是 @DeleteMapping("/remove/{id}"),此方法在浏览器中是无法进行测试的,我们需要通过swagger进行测试,swagger是一个api文档,可以在网页进行测试每个接口(此接口指的是与前端的接口,即controller类里面的方法,而不是interface),swagger如何实现下篇文章进行说明。

@RestController
@RequestMapping("/edu/teacher")
public class TeacherController {

    @Autowired
    private TeacherService teacherService;

    @ApiParam(value = "所有老师信息")
    @GetMapping("all")
    public R getAll(){
        List<Teacher> list = teacherService.list(null);
        return R.ok().data("items",list);
    }
    @ApiParam(value = "根据id逻辑删除老师")
    //用swagger进行测试
    @DeleteMapping("/remove/{id}")
    public R deleted(@PathVariable Long id){
        boolean flag = teacherService.removeById(id);
        if (flag){
            return R.ok().message("删除成功!");
        }else {
            return R.error().message("删除失败!");
        }

    }

    @GetMapping("/page/{current}/{size}")
    public R pageTeacher(@PathVariable Integer current,
                         @PathVariable Integer size   ){
        Page<Teacher> page = new Page<>(current,size);

        try {
            int i=10/0;
        }catch (Exception e){
          throw  new YuanExcaption(20001,"执行了自定义异常!");
        }

        teacherService.page(page,null);
        long total = page.getTotal();//总记录数
        List<Teacher> records = page.getRecords();//每页数据的集合
        HashMap map = new HashMap();
        map.put("total",total);
        map.put("records",records);
        return R.ok().data(map);

    }
    //分页查询带分页
    @PostMapping("/ContiditionPage/{current}/{size}")
    public R PageTeacherCondition(@PathVariable int current,
                                  @PathVariable int size  ,
                                  @RequestBody(required = false) TeacherQuery teacherQuery){
        Page<Teacher> page = new Page<>(current, size);

        QueryWrapper<Teacher> wrapper = new QueryWrapper<>();

        String career = teacherQuery.getCareer();
        Integer level = teacherQuery.getLevel();
        Date greatTime = teacherQuery.getGreatTime();
        Date updateTime = teacherQuery.getUpdateTime();
        if (!StringUtils.isEmpty(career)){
            wrapper.like("career",career);
        }
        if (!StringUtils.isEmpty(level)){
            wrapper.eq("level",level);
        }
        if (!StringUtils.isEmpty(greatTime)){
            wrapper.ge("great_time",greatTime);
        }
        if (!StringUtils.isEmpty(updateTime)){
            wrapper.le("update_time",updateTime);
        }
        IPage<Teacher> teacherIPage = teacherService.page(page, wrapper);

        long total = page.getTotal();//总记录数
        List<Teacher> records = page.getRecords();//每页数据的集合
        HashMap map = new HashMap();
        map.put("total",total);
        map.put("records",records);

        return R.ok().data(map);
    }
    //添加讲师
    @PostMapping("add")
    public R addTeacher(@RequestBody Teacher teacher){
        boolean save = teacherService.save(teacher);
        if (save){
           return R.ok();
       }else {
            return R.error();
        }

    }
    //根据id查询
    @GetMapping("select/{id}")
    public R getTeacherById(@PathVariable Integer id){

        Teacher teacher = teacherService.getById(id);
        return R.ok().data("teacher",teacher);
    }


    //修改讲师
    @PostMapping("updateTeacher")
    public R updateTeacherById(@RequestBody Teacher teacher){
        boolean b = teacherService.updateById(teacher);
        if (b){
            return R.ok();
        }else {
            return R.error();
        }
    }


}

您的点赞是对我最大的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值