在最近的開發開發項目中,我使用了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": []}以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。
新聞熱點
疑難解答