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 相关文章推荐
动态创建类实例代码
Oct 07 Python
使用python实现rsa算法代码
Feb 17 Python
python模块之re正则表达式详解
Feb 03 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
python如何修改装饰器中参数
Mar 20 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
pandas.cut具体使用总结
Jun 24 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
Django模板Templates使用方法详解
Jul 19 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
Python天气语音播报小助手
Sep 25 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使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
如何离线执行php任务
2017/02/21 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python正则表达式使用经典实例
2016/06/21 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
如何用python处理excel表格
2020/06/09 Python
python 爬虫请求模块requests详解
2020/12/04 Python
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
活动邀请函范文
2014/01/19 职场文书
股权投资意向书
2014/04/01 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
大学军训决心书
2015/02/05 职场文书
降价通知函
2015/04/23 职场文书
2015年公务员工作总结
2015/04/24 职场文书
公司管理制度范本
2015/08/03 职场文书
加强党性修养心得体会
2016/01/21 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
python可视化大屏库big_screen示例详解
2021/11/23 Python
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫