在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

【写法规范】-- 设计请求返回接口与封装相关推荐

  1. php - Api 接口写法规范和要求

    前言 说明 apidoc是一个API文档生成工具, apidoc可以根据代码注释生成web api文档, apidoc从注释生成静态html网页文档,不仅支持项目版本号,还支持api版本号 安装 A) ...

  2. 单页面axios_Axios封装之取消重复请求和接口缓存

    在平时的单页面项目里,大家肯定接触过axios库,一个易用.简洁且高效,使用Promise管理异步,告别传统callback方式的http库. 最近有个项目里接口调取的频率比较高,接口队列长,然后等待 ...

  3. ajax背景、ajax对象、ajax状态、ajax与http、ajax请求数据接口、同步与异步、ajax请求XML数据、封装ajax函数、artTemplate简介、同源策略和跨域请求、JSONP

    AJAX简介: ajax背景: 1.AJAX(Asynchronous JavaScript And Xml)异步的 JavaScript 和 XML:ajax是浏览器提供的一套API,最早出现在谷歌 ...

  4. 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据

    前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...

  5. C语言接口的封装和设计专题

    C语言接口的封装和设计专题 Win32环境下动态链接库(DLL)编程原理 导出和导入函数的匹配 与DLL模块建立链接 使用符号名链接与标识号链接 编写DllMain函数 模块句柄 应用程序怎样找到DL ...

  6. vue中请求接口怎么封装公共地址_如何修改Vue打包后文件的接口地址配置(转自网络)...

    1.背景 常规的vue项目分为本地环境和生产环境,我们只要对 config 文件夹下的 dev.env.js 和 prod.env.js 做相应的配置即可.但是最近在做的项目中,涉及到私有化部署,就是 ...

  7. RTMP推流协议视频直播点播平台EasyDSS请求时间接口返回的数据打印在前端页面全屏飘红问题解决

    TSINGSEE青犀视频团队接到过很多比较大的项目,这类项目的特点是接入数据量多,处理数据量也大,在对服务器造成负荷的同时,也对程序造成了堵塞. 拿EasyDSS视频直播点播平台举例,一旦EasyDS ...

  8. 接口返回html页面乱码,解决nodejs中使用http请求返回值为html时乱码的问题

    今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法.果不其然报错了:SyntaxError: Unexpected token  in JSON ...

  9. 【编程规范】 后端API接口设计编写与文档编写参考

    文章目录 0 统一规范 0.1 理清业务流程 0.2 定义前后端开发的接口规范 0.3 定义接口文档 1 后端接口编写 1.0 后端接口介绍 1.0.1 接口交互 1.0.2 返回格式 1.0.3 C ...

最新文章

  1. SWAGAN:基于样式的小波驱动生成模型
  2. tp框架实现ajax
  3. git pull问题“error: Your local changes to the following files would be overwritten by merge”解决方案
  4. 厉害了,教你用 Spring Boot 控制并发登录人数
  5. xml 文本转json java_java将XML文档转换成json格式数据
  6. python自动下载app_APP自动化之安装Python(类库)环境
  7. python + hadoop (案例)
  8. _Linux结束进程到底有多少种方法?
  9. 用python二重循环求成绩表_python的循环
  10. mpvue中使用vant-weapp
  11. 判断拐点_一文教你“如何寻找拐点”——拐点判断,简单易懂,建议收藏
  12. 从零开始学习python编程-新书推荐《Python3.7从零开始学》来了
  13. eclipse maven 打war包的几种方式
  14. 平稳时间序列模型的统计性质
  15. 计算机上安装了更新ie版本,电脑ie浏览器版本过低怎么升级方法
  16. Win10系统添加英文键盘
  17. formidable词根词缀_托福词汇-重点词根词缀总结(二)
  18. COVID-19 AI-related Technical Paper
  19. java判断一个点在不在直线上,判断点在直线左侧或者右侧
  20. 解决mysql报Lock wait timeout exceeded; try restarting transaction的问题

热门文章

  1. 电脑主板接口_PCI接口借尸还魂?精英发布新款B450电脑主板,配备老式PCI接口...
  2. 信奥中的数学:前缀和与差分、大整数开方技巧
  3. 科技前沿及论文写作相关视频
  4. java图片查看器下载_java照片查看器源代码
  5. 【ES11(2020)】String 扩展 String.prototype.matchAll()
  6. mui HTML5plus 批量上传文件
  7. Qt笔记-进程只能存在1个(Linux适用,Windows有思路)
  8. Leaflet文档阅读笔记-Using GeoJSON with Leaflet笔记
  9. Java方法的反射(对反射的进一步认识)
  10. Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析