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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
Python随机生成带特殊字符的密码
Mar 02 Python
基于python内置函数与匿名函数详解
Jan 09 Python
对pandas中to_dict的用法详解
Jun 05 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
Python通过len函数返回对象长度
Oct 22 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
smarty半小时快速上手入门教程
2014/10/27 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
python实现图片压缩代码实例
2019/08/12 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
员工安全生产承诺书
2014/05/22 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
指导老师鉴定意见
2015/06/05 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python