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使用any判断一个对象是否为空的方法
Nov 19 Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
在Python中使用HTML模版的教程
Apr 29 Python
python 写的一个爬虫程序源码
Feb 28 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
python实现简单银行管理系统
Oct 25 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 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实现异步调用方法研究与分享
2011/10/27 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
js代码实现随机颜色的小方块
2015/07/30 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
python增加图像对比度的方法
2019/07/12 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
Python中过滤字符串列表的方法
2020/12/22 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
德国高性价比网上药店:medpex
2017/07/09 全球购物
佳能英国官方网站:Canon UK
2017/08/08 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
妇科医生自荐信
2013/11/05 职场文书
安全检查验收制度
2014/01/12 职场文书
新领导上任欢迎词
2014/01/13 职场文书
个性车贴标语
2014/06/24 职场文书
年终晚会活动方案
2014/08/21 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
写给女朋友的保证书
2015/05/09 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL