Laravel+Dingo/Api 自定義響應(yīng)的實(shí)現(xiàn)
在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了Dingo/Api這個(gè)第三方Api庫。
Dingo是個(gè)很強(qiáng)大的Api庫, 但在開發(fā)的過程中,需要自定義響應(yīng)字段。
剛開始使用Ding/Api時(shí),返回如下:
{ "message": "422 Unprocessable Entity", "errors": { "mobile": [ "手機(jī)號格式不正確" ] }, "status_code": 422 }
這是輸入字段驗(yàn)證錯(cuò)誤時(shí),Dingo返回的結(jié)果。
這樣看上去沒什么問題。因?yàn)檫@邊 status_code 是比較規(guī)范的。對于 PHP 來說,直接 json_decode 之后,并沒有什么難辦的地方。但是對面安卓和 IOS 則是使用的強(qiáng)類型語言。尤其是 Java,需要對每一個(gè) Json 對象進(jìn)行新建,然后序列化。所以,這種格式不統(tǒng)一的返回結(jié)果,是無法接受的
解決方法: 我們需要將所有的異常信息歸總到一個(gè)地方,在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('系統(tǒng)休息了', 500000); break; }
再次訪問接口:
{ "response_status_code": 422, "response_message": "請?zhí)顚懯謾C(jī)號", "data": [] }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- laravel框架中表單請求類型和CSRF防護(hù)實(shí)例分析
- Laravel 解決419錯(cuò)誤 -ajax請求錯(cuò)誤的問題(CSRF驗(yàn)證)
- 對laravel的csrf 防御機(jī)制詳解,及form中csrf_token()的存在介紹
- laravel 實(shí)現(xiàn)關(guān)閉CSRF(全部關(guān)閉、部分關(guān)閉)
- laravel csrf排除路由,禁止,關(guān)閉指定路由的例子
- Laravel框架中VerifyCsrfToken報(bào)錯(cuò)問題的解決
- 在 Laravel 中動態(tài)隱藏 API 字段的方法
- laravel框架 api自定義全局異常處理方法
- 讓Laravel API永遠(yuǎn)返回JSON格式響應(yīng)的方法示例
- 基于laravel制作APP接口(API)
- Laravel5.3+框架定義API路徑取消CSRF保護(hù)方法詳解
相關(guān)文章
Python 實(shí)現(xiàn)中值濾波、均值濾波的方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)中值濾波、均值濾波的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python facenet進(jìn)行人臉識別測試過程解析
這篇文章主要介紹了Python facenet進(jìn)行人臉識別測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python實(shí)現(xiàn)人生重開模擬器小游戲講解
這篇文章主要介紹了Python實(shí)現(xiàn)人生重開模擬器小游戲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01Python實(shí)現(xiàn)獲取視頻時(shí)長功能
這篇文章主要介紹了Python如何實(shí)現(xiàn)獲取視頻時(shí)長功能,可以精確到毫秒。文中的示例代碼簡潔易懂,對我們的學(xué)習(xí)有一定的幫助,感興趣的可以了解一下2021-12-12Python入門教程(三十八)Python的NumPy庫簡介
這篇文章主要介紹了Python入門教程(三十八)Python的NumPy庫簡介,NumPy 是用于處理數(shù)組的 python 庫,它還擁有在線性代數(shù)、傅立葉變換和矩陣領(lǐng)域中工作的函數(shù),需要的朋友可以參考下2023-05-05使用Python實(shí)現(xiàn)壓縮pptx的功能
當(dāng)處理大型PPTX文件時(shí),其中包含許多高分辨率照片時(shí),文件大小可能會顯著增加,為了解決這個(gè)問題,我們可以使用Python編程語言和python-pptx庫來壓縮PPTX文件中的照片,下面我們就來看看具體操作吧2024-02-02pytorch:實(shí)現(xiàn)簡單的GAN示例(MNIST數(shù)據(jù)集)
今天小編就為大家分享一篇pytorch:實(shí)現(xiàn)簡單的GAN示例(MNIST數(shù)據(jù)集),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python+django加載靜態(tài)網(wǎng)頁模板解析
這篇文章主要介紹了python+django加載靜態(tài)網(wǎng)頁模板解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12