1. 程式人生 > 其它 >Springboot 實現前後分離的固定響應結構 {code,data,msg} 程式碼及想法

Springboot 實現前後分離的固定響應結構 {code,data,msg} 程式碼及想法

想法

之前也封裝過多次響應結構,但是總是感覺越封越不好用,還有時候把http狀態碼忽略掉,直接響應自定義的結構,後面發現自定義響應結構不能應付需要http狀態碼的場景。

本次實現沒有把系統提供的 ResponseEntity 封裝進去,只是實現了自定義響應資料結構,感覺還不錯。

我現在自己使用的只有自定義 code (0,1),如果還需要其他的,可以自行新增。

程式碼

響應結構類 HttpResponseStructure

package com.xiaqiuchu.im.api.util;

import com.xiaqiuchu.im.api.type.HttpResponseStructureCodeEnum;

import java.io.Serializable;

/**
 * @Author 夏秋初
 * @Date 2022/3/14 13:21
 */
public class HttpResponseStructure implements Serializable {

    private HttpResponseStructureCodeEnum code;
    private String msg = "";
    private Object data = null;

    public static HttpResponseStructure getInterface(){
        return new HttpResponseStructure();
    }

    public HttpResponseStructure setCode(HttpResponseStructureCodeEnum code) {
        this.code = code;
        return this;
    }

    public HttpResponseStructure setMsg(String msg) {
        this.msg = msg;
        return this;
    }

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

    public Integer getCode() {
        return code.getCode();
    }

    public String getMsg() {
        return msg;
    }

    public Object getData() {
        return data;
    }

    public static HttpResponseStructure success(HttpResponseStructureCodeEnum code, String msg, Object data) {
        return HttpResponseStructure.getInterface().setCode(code).setMsg(msg).setData(data);
    }
    public static HttpResponseStructure success(HttpResponseStructureCodeEnum code, Object data) {
        return HttpResponseStructure.getInterface().setCode(code).setMsg("操作成功").setData(data);
    }
    public static HttpResponseStructure success(HttpResponseStructureCodeEnum code) {
        return HttpResponseStructure.getInterface().setCode(code).setMsg("操作成功").setData(null);
    }
    public static HttpResponseStructure success(Object data) {
        return HttpResponseStructure.getInterface().setCode(HttpResponseStructureCodeEnum.SUCCESS).setMsg("操作成功").setData(data);
    }
    public static HttpResponseStructure success() {
        return HttpResponseStructure.getInterface().setCode(HttpResponseStructureCodeEnum.SUCCESS).setMsg("操作成功").setData(null);
    }

    public static HttpResponseStructure error(HttpResponseStructureCodeEnum code, String msg) {
        return HttpResponseStructure.getInterface().setCode(code).setMsg(msg);
    }
    public static HttpResponseStructure error(HttpResponseStructureCodeEnum code) {
        return HttpResponseStructure.getInterface().setCode(code).setMsg("操作失敗");
    }
    public static HttpResponseStructure error() {
        return HttpResponseStructure.getInterface().setCode(HttpResponseStructureCodeEnum.ERROR).setMsg("操作失敗");
    }


}

自定義 code 類 HttpResponseStructure

package com.xiaqiuchu.im.api.type;

/**
 * 響應Code列舉類
 * @Author 夏秋初
 * @Date 2022/3/14 13:41
 */
public enum HttpResponseStructureCodeEnum {
    // 成功
    SUCCESS(0),
    // 失敗
    ERROR(1);

    private Integer code;

    HttpResponseStructureCodeEnum(Integer code){
        this.code = code;
    }

    public Integer getCode(){
        return code;
    }
}

使用

程式碼呼叫

package com.xiaqiuchu.im.api.controller.websocket;

import com.xiaqiuchu.im.api.type.HttpResponseStructureCodeEnum;
import com.xiaqiuchu.im.api.type.WebsocketMessageTypeEnum;
import com.xiaqiuchu.im.api.util.HttpResponseStructure;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author 夏秋初
 * @Date 2022/3/13 16:49
 */
@RequestMapping("/websocket/message/type")
@RestController
public class WebsocketMessageType {
    @GetMapping("/test")
    public ResponseEntity<HttpResponseStructure> test(){
        return new ResponseEntity<>(HttpResponseStructure.success(), HttpStatus.OK);
    }
}

結果