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获取GY-85九轴模块信息示例
Dec 05 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
python实现逆波兰计算表达式实例详解
May 06 Python
python获得一个月有多少天的方法
Jun 04 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
详解python的argpare和click模块小结
Mar 31 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
Python无头爬虫下载文件的实现
Apr 02 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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python性能优化技巧
2015/03/09 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
会计专业推荐信
2013/10/29 职场文书
大学生应聘推荐信范文
2013/11/19 职场文书
现金会计岗位职责
2013/12/05 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书