Laravel+Dingo/Api 自定义响应的实现


Posted in Python onFebruary 17, 2019

在最近的开发开发项目中,我使用了Dingo/Api这个第三方Api库。

Dingo是个很强大的Api库, 但在开发的过程中,需要自定义响应字段。

刚开始使用Ding/Api时,返回如下:

{
  "message": "422 Unprocessable Entity",
  "errors": {
    "mobile": [
      "手机号格式不正确"
    ]
  },
  "status_code": 422
}

这是输入字段验证错误时,Dingo返回的结果。

这样看上去没什么问题。因为这边 status_code 是比较规范的。对于 PHP 来说,直接 json_decode 之后,并没有什么难办的地方。但是对面安卓和 IOS 则是使用的强类型语言。尤其是 Java,需要对每一个 Json 对象进行新建,然后序列化。所以,这种格式不统一的返回结果,是无法接受的

解决方法: 我们需要将所有的异常信息归总到一个地方,在AppServiceProvider的boot()方法中添加

// 将所有的 Exception 全部交给 App\Exceptions\Handler 来处理
app('api.exception')->register(function (Exception $exception) {
  $request = Illuminate\Http\Request::capture();
  return app('App\Exceptions\Handler')->render($request, $exception);
});

然后在App\Exceptions\Handler.php中的render()方法中:

$class = get_class($exception);
switch ($class) {
  case 'Dingo\Api\Exception\ValidationHttpException':
    if ($request->expectsJson())
      return $this->errorRespond($exception->getErrors()->first(), $exception->getStatusCode());
    break;

  default:
    if ($request->expectsJson())
      return $this->errorRespond('系统休息了', 500000);

    break;
}

再次访问接口:

{
  "response_status_code": 422,
  "response_message": "请填写手机号",
  "data": []
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
python3使用urllib模块制作网络爬虫
Apr 08 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
解决Python3下map函数的显示问题
Dec 04 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python录音并调用百度语音识别接口的示例
Dec 01 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
python爬虫爬取图片的简单代码
Jan 18 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 #Python
Python线程之定位与销毁的实现
Feb 17 #Python
Pandas读取并修改excel的示例代码
Feb 17 #Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 #Python
Python字符串逆序输出的实例讲解
Feb 16 #Python
强悍的Python读取大文件的解决方案
Feb 16 #Python
Python基础之文件读取的讲解
Feb 16 #Python
You might like
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
django框架ModelForm组件用法详解
2019/12/11 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
Python 实现集合Set的示例
2020/12/21 Python
Python实现微信表情包炸群功能
2021/01/28 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
自荐书格式
2013/12/01 职场文书
四年级数学教学反思
2014/02/02 职场文书
领导干部考察材料
2014/02/08 职场文书
五年级数学教学反思
2014/02/11 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技