【SpringBoot】实现统一RESTful返回格式的方法

在RESTful设计风格中,为了保障前后端的数据交互的顺畅,建议规范数据的返回,并采用固定的数据格式封装。

本文将介绍在SpringBoot中如何将统一化返回格式部分的代码进行封装以简化controller函数对返回格式的处理。

总览

创建 /src/main/java/com.../result目录,创建三个类:ExceptionMsg, Response,ResponseData。如下图所示:
在这里插入图片描述

ExceptionMsg 类

该类用以实现响应的枚举

package com.example.studb.result;

// 实现响应的枚举类
public enum ExceptionMsg {
    SUCCESS(0, "success"),
    FAILED(-1,"fail");

    private ExceptionMsg(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    private int code;
    private String msg;

    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
}

Response 类

该类用于实现返回对象实体。

package com.example.studb.result;

// 实现返回对象实体
public class Response {
    /** 返回信息码*/
    private int rspCode = 0;
    /** 返回信息内容*/
    private String rspMsg = "success";

    public Response() {
    }

    public Response(ExceptionMsg msg){
        this.rspCode = msg.getCode();
        this.rspMsg = msg.getMsg();
    }

    public Response(int rspCode) {
        this.rspCode = rspCode;
        this.rspMsg = "";
    }

    public Response(int rspCode, String rspMsg) {
        this.rspCode = rspCode;
        this.rspMsg = rspMsg;
    }
    public int getRspCode() {
        return rspCode;
    }
    public void setRspCode(int rspCode) {
        this.rspCode = rspCode;
    }
    public String getRspMsg() {
        return rspMsg;
    }
    public void setRspMsg(String rspMsg) {
        this.rspMsg = rspMsg;
    }

    @Override
    public String toString() {
        return "Response{" +
                "rspCode='" + rspCode + '\'' +
                ", rspMsg='" + rspMsg + '\'' +
                '}';
    }
}

ResponseData 类

该类用于封装返回结果。

package com.example.studb.result;

// 封装返回结果
public class ResponseData extends Response {
    private Object data;

    public ResponseData(Object data) {
        this.data = data;
    }

    public ResponseData(ExceptionMsg msg) {
        super(msg);
    }

    public ResponseData(int rspCode, String rspMsg) {
        super(rspCode, rspMsg);
    }

    public ResponseData(int rspCode, String rspMsg, Object data) {
        super(rspCode, rspMsg);
        this.data = data;
    }

    public ResponseData(ExceptionMsg msg, Object data) {
        super(msg);
        this.data = data;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "ResponseData{" +
                "data=" + data +
                "} " + super.toString();
    }
}

使用

假如我有一个controller的类:CourseController,用来查询数据库中所存储的课程信息,使用courseMapper.queryAll()即可得到结果,为了将结果发送出去,并包装成统一的返回格式,可以这样做:

@RestController
@RequestMapping("/course")
public class CourseController {

    @Autowired
    private CourseMapper courseMapper;

    @RequestMapping("/query")
    public Object queryAll() {
        return new ResponseData(ExceptionMsg.SUCCESS, courseMapper.queryAll());
    }
}

也就是将需要发送的结果数据放入ResponseData构造器的第二个参数里,将新创建的对象return出去。

效果

对该controller发送请求后可以得到如下结果:
在这里插入图片描述
可以看到查询的结果数据被统一的格式封装了起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值