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 ip正则式
May 07 Python
Python实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
Python科学画图代码分享
Nov 29 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
python内置数据类型之列表操作
Nov 12 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
django rest framework 自定义返回方式
Jul 12 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 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中最容易忘记的一些知识点总结
2013/04/28 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
javascript解析json实例详解
2014/11/05 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
使用Python开发windows GUI程序入门实例
2014/10/23 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python编程之属性和方法实例详解
2015/05/19 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
最新自我评价范文
2013/11/16 职场文书
高三语文教学反思
2014/01/15 职场文书
大学四年个人自我小结
2014/03/05 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript
Python 中 Shutil 模块详情
2021/11/11 Python
带你了解Java中的ForkJoin
2022/04/28 Java/Android