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 相关文章推荐
python传递参数方式小结
Apr 17 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
Django中ORM外键和表的关系详解
May 20 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
Jul 26 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
Python基于numpy模块实现回归预测
May 14 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 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
php for 循环语句使用方法详细说明
2010/05/09 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
浅析php工厂模式
2014/11/25 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
初始Nodejs
2014/11/08 NodeJs
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
vue引入swiper插件的使用实例
2017/07/19 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
python字典多条件排序方法实例
2014/06/30 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
python实现串口通信的示例代码
2020/02/10 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
最新的互联网创业计划书
2014/01/10 职场文书
市场推广策划方案
2014/06/02 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
python运算符之与用户交互
2022/04/13 Python