Springboot 實現前後分離的固定響應結構 {code,data,msg} 程式碼及想法
阿新 • • 發佈:2022-03-14
想法
之前也封裝過多次響應結構,但是總是感覺越封越不好用,還有時候把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); } }