【写法规范】-- 设计请求返回接口与封装
在web开发时,请求返回一般有两类。一类是数据(一般为json格式),一类是页面。
@GetMapping("/hello")public String hello1(){//这里使用的thymeleaf,会去找hello.htmlreturn "hello";}@ResponseBody@GetMapping("/hello")public String hello2(){//直接返回字符串return "hello lhb";}
这显然不太规范,会给前后端开发人员之间的沟通和协作带来麻烦。
正确的做法是设计规范的接口并进行封装。
服务端返回的数据格式(json)
{"code":0"msg" :"data":{},[] }
code:代表错误码。具体的错误码是需要自定义的,例如:0代表成功,777代表服务器异常等。
msg:代表错误信息
data:代表成功时的数据,可以是json对象或数组。
{"code":777"msg" :"服务器异常""data":{} }
接下来让我们来看一个封装的实例:
Result类:
public class Result<T> {private int code;private String msg;private T data;/*** 请求成功时调用* @param data* @return*/public static <T> Result<T> success(T data){return new Result<T>(data);}public static <T> Result<T> error(CodeMsg cm){return new Result<T>(cm);}/*** 只传入数据默认成功,所以添加默认的code和msg* @param data*/private Result(T data) {this.code=0;this.msg="success";this.data=data;}private Result(CodeMsg cm) {if(cm==null){return;}this.code=cm.getCode();this.msg=cm.getMsg();}public int getCode() {return code;}public String getMsg() {return msg;}public T getData() {return data;}}
CodeMsg类:
public class CodeMsg {private int code;private String msg;//通用的错误码public static CodeMsg SUCCESS = new CodeMsg(0, "success");public static CodeMsg SERVER_ERROR = new CodeMsg(777, "服务端异常");public int getCode() {return code;}public String getMsg() {return msg;}private CodeMsg(int code,String msg) {this.code = code;this.msg = msg;}}
为什么要有CodeMsg类?
如果没有CodeMsg类,当我们请求返回成功时,可以直接将数据传入。
@ResponseBody@GetMapping("/hello")public Result<String> hello(){return Result.success("hello");}
但是,如果请求失败,需要传递错误信息时,我们必须这么做。
@ResponseBody@GetMapping("/helloerror")public Result<String> helloError(){return Result.error(new CodeMsg(777,"服务器异常"));}
这样不是不可以,只是看起来不太优雅。而且,如果项目非常大,到后期可能连你自己也不知道自己定义了多少错误码,甚至可能重复定义错误码。
如何优化呢?我们只需要在CodeMsg中定义静态的成员变量,并且给它赋上自定义的错误码和错误信息,这样不仅看上去规范了许多,而且所有的错误类型都在一个地方,方便修改和检查。
优化后:
@ResponseBody@GetMapping("/helloerror")public Result<String> helloError(){return Result.error(CodeMsg.SERVER_ERROR);}
转载于:https://www.cnblogs.com/jsyllhb/p/10548169.html
【写法规范】-- 设计请求返回接口与封装相关推荐
- php - Api 接口写法规范和要求
前言 说明 apidoc是一个API文档生成工具, apidoc可以根据代码注释生成web api文档, apidoc从注释生成静态html网页文档,不仅支持项目版本号,还支持api版本号 安装 A) ...
- 单页面axios_Axios封装之取消重复请求和接口缓存
在平时的单页面项目里,大家肯定接触过axios库,一个易用.简洁且高效,使用Promise管理异步,告别传统callback方式的http库. 最近有个项目里接口调取的频率比较高,接口队列长,然后等待 ...
- ajax背景、ajax对象、ajax状态、ajax与http、ajax请求数据接口、同步与异步、ajax请求XML数据、封装ajax函数、artTemplate简介、同源策略和跨域请求、JSONP
AJAX简介: ajax背景: 1.AJAX(Asynchronous JavaScript And Xml)异步的 JavaScript 和 XML:ajax是浏览器提供的一套API,最早出现在谷歌 ...
- 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据
前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...
- C语言接口的封装和设计专题
C语言接口的封装和设计专题 Win32环境下动态链接库(DLL)编程原理 导出和导入函数的匹配 与DLL模块建立链接 使用符号名链接与标识号链接 编写DllMain函数 模块句柄 应用程序怎样找到DL ...
- vue中请求接口怎么封装公共地址_如何修改Vue打包后文件的接口地址配置(转自网络)...
1.背景 常规的vue项目分为本地环境和生产环境,我们只要对 config 文件夹下的 dev.env.js 和 prod.env.js 做相应的配置即可.但是最近在做的项目中,涉及到私有化部署,就是 ...
- RTMP推流协议视频直播点播平台EasyDSS请求时间接口返回的数据打印在前端页面全屏飘红问题解决
TSINGSEE青犀视频团队接到过很多比较大的项目,这类项目的特点是接入数据量多,处理数据量也大,在对服务器造成负荷的同时,也对程序造成了堵塞. 拿EasyDSS视频直播点播平台举例,一旦EasyDS ...
- 接口返回html页面乱码,解决nodejs中使用http请求返回值为html时乱码的问题
今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法.果不其然报错了:SyntaxError: Unexpected token in JSON ...
- 【编程规范】 后端API接口设计编写与文档编写参考
文章目录 0 统一规范 0.1 理清业务流程 0.2 定义前后端开发的接口规范 0.3 定义接口文档 1 后端接口编写 1.0 后端接口介绍 1.0.1 接口交互 1.0.2 返回格式 1.0.3 C ...
最新文章
- SWAGAN:基于样式的小波驱动生成模型
- tp框架实现ajax
- git pull问题“error: Your local changes to the following files would be overwritten by merge”解决方案
- 厉害了,教你用 Spring Boot 控制并发登录人数
- xml 文本转json java_java将XML文档转换成json格式数据
- python自动下载app_APP自动化之安装Python(类库)环境
- python + hadoop (案例)
- _Linux结束进程到底有多少种方法?
- 用python二重循环求成绩表_python的循环
- mpvue中使用vant-weapp
- 判断拐点_一文教你“如何寻找拐点”——拐点判断,简单易懂,建议收藏
- 从零开始学习python编程-新书推荐《Python3.7从零开始学》来了
- eclipse maven 打war包的几种方式
- 平稳时间序列模型的统计性质
- 计算机上安装了更新ie版本,电脑ie浏览器版本过低怎么升级方法
- Win10系统添加英文键盘
- formidable词根词缀_托福词汇-重点词根词缀总结(二)
- COVID-19 AI-related Technical Paper
- java判断一个点在不在直线上,判断点在直线左侧或者右侧
- 解决mysql报Lock wait timeout exceeded; try restarting transaction的问题
热门文章
- 电脑主板接口_PCI接口借尸还魂?精英发布新款B450电脑主板,配备老式PCI接口...
- 信奥中的数学:前缀和与差分、大整数开方技巧
- 科技前沿及论文写作相关视频
- java图片查看器下载_java照片查看器源代码
- 【ES11(2020)】String 扩展 String.prototype.matchAll()
- mui HTML5plus 批量上传文件
- Qt笔记-进程只能存在1个(Linux适用,Windows有思路)
- Leaflet文档阅读笔记-Using GeoJSON with Leaflet笔记
- Java方法的反射(对反射的进一步认识)
- Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析