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
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
标签:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2019-03-14 Centos7 忘记密码的情况下,修改root或其他用户密码
2019-03-14 【网络安全】telnet 登陆远程服务器