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将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
Python 处理数据的实例详解
Aug 10 Python
python matlibplot绘制多条曲线图
Feb 19 Python
python打造爬虫代理池过程解析
Aug 15 Python
Python实现密码薄文件读写操作
Dec 16 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
深入浅析python的第三方库pandas
Feb 13 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 Python
如何用python插入独创性声明
Mar 31 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
django允许外部访问的实例讲解
2018/05/14 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
英国健身超市:Fitness Superstore
2019/06/17 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
文员个人的求职信范文
2013/09/26 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
毕业证委托书范文
2014/09/26 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
Redis基本数据类型Set常用操作命令
2022/06/01 Redis
virtualenv隔离Python环境的问题解析
2022/06/21 Python