Springboot2.x 实现前后分离的固定响应结构 {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);
    }
}
结果


    博  主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/16003757.html
 
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
    
地 址 :https://www.cnblogs.com/xiaqiuchu/p/16003757.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号