• 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 HttpResponseStructureUtil<T> implements Serializable {
    
        private HttpResponseStructureCodeEnum code;
        private String msg = "";
        private T data = null;
    
        public static<T> HttpResponseStructureUtil<T> getInterface(){
            return new HttpResponseStructureUtil<T>();
        }
    
        public HttpResponseStructureUtil<T> setCode(HttpResponseStructureCodeEnum code) {
            this.code = code;
            return this;
        }
    
        public HttpResponseStructureUtil<T> setMsg(String msg) {
            this.msg = msg;
            return this;
        }
    
        public HttpResponseStructureUtil<T> setData(T data) {
            this.data = data;
            return this;
        }
    
        public Integer getCode() {
            return code.getCode();
        }
    
        public String getMsg() {
            return msg;
        }
    
        public T getData() {
            return data;
        }
    
        public static<T> HttpResponseStructureUtil success(HttpResponseStructureCodeEnum code, String msg, T data) {
            return HttpResponseStructureUtil.getInterface().setCode(code).setMsg(msg).setData(data);
        }
        public static<T> HttpResponseStructureUtil success(HttpResponseStructureCodeEnum code, T data) {
            return HttpResponseStructureUtil.getInterface().setCode(code).setMsg("操作成功").setData(data);
        }
        public static HttpResponseStructureUtil success(HttpResponseStructureCodeEnum code) {
            return HttpResponseStructureUtil.getInterface().setCode(code).setMsg("操作成功").setData(null);
        }
        public static<T> HttpResponseStructureUtil success(T data) {
            return HttpResponseStructureUtil.getInterface().setCode(HttpResponseStructureCodeEnum.SUCCESS).setMsg("操作成功").setData(data);
        }
        public static HttpResponseStructureUtil success() {
            return HttpResponseStructureUtil.getInterface().setCode(HttpResponseStructureCodeEnum.SUCCESS).setMsg("操作成功").setData(null);
        }
    
        public static HttpResponseStructureUtil error(HttpResponseStructureCodeEnum code, String msg) {
            return HttpResponseStructureUtil.getInterface().setCode(code).setMsg(msg);
        }
        public static HttpResponseStructureUtil error(HttpResponseStructureCodeEnum code) {
            return HttpResponseStructureUtil.getInterface().setCode(code).setMsg("操作失败");
        }
        public static HttpResponseStructureUtil error() {
            return HttpResponseStructureUtil.getInterface().setCode(HttpResponseStructureCodeEnum.ERROR).setMsg("操作失败");
        }
    
    
    }
    
    

    响应Code枚举类

    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;
        }
    }
    
    

    当前接口 dto 响应

    package com.xiaqiuchu.im.api.entity.res.websocket;
    
    import lombok.Data;
    
    import java.util.HashMap;
    
    /**
     * @Author 夏秋初
     * @Date 2022/3/21 16:24
     */
    @Data
    public class ResWebsocketMessageTypeAll {
        private HashMap<String,String> types;
    }
    
    

    使用

    代码调用

    package com.xiaqiuchu.im.api.controller.websocket;
    
    import com.xiaqiuchu.im.api.entity.res.websocket.ResWebsocketMessageTypeAll;
    import com.xiaqiuchu.im.api.service.websocket.WebsocketMessageTypeService;
    import com.xiaqiuchu.im.api.util.HttpResponseStructureUtil;
    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;
    
    import javax.annotation.Resource;
    import java.util.HashMap;
    
    /**
     * @Author 夏秋初
     * @Date 2022/3/13 16:49
     */
    @RequestMapping("/websocket/messagetype")
    @RestController
    public class WebsocketMessageType {
    
        @Resource
        WebsocketMessageTypeService websocketMessageTypeService;
    
        @GetMapping("/all")
        public ResponseEntity<HttpResponseStructureUtil<ResWebsocketMessageTypeAll>> getAllType(){
            ResWebsocketMessageTypeAll resWebsocketMessageTypeAll = new ResWebsocketMessageTypeAll();
            resWebsocketMessageTypeAll.setTypes(websocketMessageTypeService.getAllType());
            return new ResponseEntity<>(HttpResponseStructureUtil.success(resWebsocketMessageTypeAll), HttpStatus.OK);
        }
    }
    
    

    结果

    image
    image

  • 相关阅读:
    Error in as.POSIXlt.character(x, tz, ...) :
    java.util.ResourceBundle使用详解
    互联网网站的反爬虫策略浅析
    基于内容的图片检索CBIR(Content Based Image Retrieval)简介
    solr
    ETL
    cv 论文(CNN相关)
    输出字符串
    Minimum_Window_Substring两种方法求解
    C++primer中的TextQuery(读取文本)
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/16003757.html
Copyright © 2020-2023  润新知