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中if __name__ == "__main__"详细解释
Oct 21 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python命令启动Web服务器实例详解
Feb 23 Python
python使用fork实现守护进程的方法
Nov 16 Python
Python中pillow知识点学习
Apr 30 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
Python zip函数打包元素实例解析
Dec 11 Python
python str字符串转uuid实例
Mar 03 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
python中selenium库的基本使用详解
Jul 31 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
python中turtle库的简单使用教程
Nov 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 的几个配置文件函数
2006/12/21 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
QQ登录简单实现代码
2021/03/09 Javascript
javascript Keycode对照表
2009/10/24 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
分享一个常用的Python模拟登陆类
2015/03/29 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
企业行政文员岗位职责
2013/12/03 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
房地产开盘策划方案
2014/02/10 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
python使用shell脚本创建kafka连接器
2022/04/29 Python
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers