Laravel+Dingo/Api 自定义响应的实现

 更新时间:2019年02月17日 10:22:47   作者:Romolo  
这篇文章主要介绍了Laravel+Dingo/Api 自定义响应的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在最近的开发开发项目中,我使用了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实现的计算器功能示例

    这篇文章主要介绍了Python实现的计算器功能,涉及Python四则运算、取反、百分比等相关数学运算操作实现技巧,需要的朋友可以参考下
    2018-04-04
  • PyQt中实现自定义工具提示ToolTip的方法详解

    PyQt中实现自定义工具提示ToolTip的方法详解

    这篇文章主要为大家详细介绍了PyQt中实现自定义工具提示ToolTip的方法详解,文中的示例代码讲解详细,对我们学习有一定帮助,需要的可以参考一下
    2022-05-05
  • Python干货实战之逆向登录世界上最大的游戏平台Stream

    Python干货实战之逆向登录世界上最大的游戏平台Stream

    有些网页中的数据进行了算法加密 这些算法代码是JavaScript 加密的地方就是在js文件里,我们需要破解这些算法加密 就需要了解这加密的过程 获取加密过程中的代码 然后进行后续的反反爬虫操作
    2021-10-10
  • python2和python3在处理字符串上的区别详解

    python2和python3在处理字符串上的区别详解

    这篇文章主要介绍了python2和python3在处理字符串上的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异

    pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异

    这篇文章主要介绍了pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 详解如何利用Numpy生成各种各样的数组

    详解如何利用Numpy生成各种各样的数组

    Numpy提供了多种函数和方法,可以方便地生成不同形状和类型的数组,今天小编就带大家学习一下如何利用 Numpy 生成各种各样的数组吧
    2023-07-07
  • 基于Python实现抢注大词的提词工具

    基于Python实现抢注大词的提词工具

    这篇文章主要为大家详细介绍了如何利用Python语言实现抢注大词的提词工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-02-02
  • python使用matplotlib绘制图片时x轴的刻度处理

    python使用matplotlib绘制图片时x轴的刻度处理

    在使用matplotlib绘制图片时,x轴的刻度可能比较密集,特别是以日期作为x轴时,则最后会显示不出来。这篇文章主要介绍了python使用matplotlib绘制图片时x轴的刻度处理,需要的朋友可以参考下
    2021-08-08
  • opencv 实现特定颜色线条提取与定位操作

    opencv 实现特定颜色线条提取与定位操作

    这篇文章主要介绍了opencv 实现特定颜色线条提取与定位操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python配置grpc环境

    python配置grpc环境

    gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Python 的 gRPC 安装使用
    2019-01-01

最新评论