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读写Redis数据库操作示例
Mar 18 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Django中处理出错页面的方法
Jul 15 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
Python实现八皇后问题示例代码
Dec 09 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
Python with标签使用方法解析
Jan 17 Python
使用python实现CGI环境搭建过程解析
Apr 28 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
Python中的面向接口编程示例详解
Jan 17 Python
Python经常使用的一些内置函数
Apr 11 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 SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
python实现爬取千万淘宝商品的方法
2015/06/30 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
python字符类型的一些方法小结
2016/05/16 Python
Python如何实现文本转语音
2016/08/08 Python
浅析python继承与多重继承
2018/09/13 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
学年自我鉴定
2014/01/16 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
交通事故协议书范本
2016/03/19 职场文书
SQL注入详解及防范方法
2021/12/06 MySQL
Python制作表白爱心合集
2022/01/22 Python
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript