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中关于日期时间处理的问答集锦
Mar 08 Python
Python with的用法
Aug 22 Python
Django自定义认证方式用法示例
Jun 23 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 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简单系统查询模块代码打包下载
2008/06/07 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
javascript date格式化示例
2013/09/25 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
详解Django CAS 解决方案
2019/10/30 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
公益活动邀请函
2014/02/05 职场文书
条幅标语大全
2014/06/20 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
JavaScript实现队列结构过程
2021/12/06 Javascript
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers