2017-06-05 113 views
0

關於這個問題內容類型不匹配於Android發送JSON請求時Laravel

我想用用寫在Laravel的API抽射發送JSON請求,當我要求檢查服務器以確保響應應也是JSON類型....它說$request->expectsJson()是錯誤的。

我做錯了什麼?

什麼是expectsJson在Laravel?:https://laravel.com/api/5.3/Illuminate/Http/Request.html#method_expectsJson

Laravel代碼:文件名:應用程序\例外\ Handler.php

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    \Log::info($request->headers->get('Content-Type')); 
    if ($request->expectsJson()) { 
     return response()->json(['Message' => trans("auth.failed")], 401); 
    } 

    return redirect()->guest(route('LoginForm')); 
} 
使用凌空

的Android Studio代碼發送請求

String Token = Common.getSharedPreference(currentContext, "TokenData"); 
Map<String, Object> jsonParams = new HashMap<>(); 
jsonParams.put("api_token", "1" + Token); 
jsonParams.put("Content-Type", "application/json; charset=utf-8"); 
jsonParams.put("Accept", "application/json"); 

String Url = Common.URL + Common.prefixURL + viewProfileURL + "?api_token=" + Token; 

JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, Url, 
                   new JSONObject(jsonParams), 
    new Response.Listener<JSONObject>() 
    { 
     @Override 
     public void onResponse(JSONObject response) 
     { 

      listener.getResult(null); 
     } 
    }, 
    new Response.ErrorListener() 
    { 
     @Override 
     public void onErrorResponse(VolleyError error) 
     { 

     } 
    }); 

回答

2

這些是HTTP頭,而不是請求身體參數

jsonParams.put("Content-Type", "application/json; charset=utf-8"); 
jsonParams.put("Accept", "application/json"); 

您需要覆蓋Volley的Map<String, String> getHeaders()方法。

How to set custom header in Volley Request

..., 
    new Response.ErrorListener() 
    { 
     ... 
    }) { 
     @Override 
     public Map<String, String> getHeaders() { 
      // Create your Map here 
     }; 
    }; 

我還建議建立不同的網址。

Use URI builder in Android or create URL with variables

+0

你可以慷慨地給予覆蓋代碼嗎? – Pankaj

+0

已添加。不確定您的API令牌。它似乎是在URL中,而不是身體 –

+0

只是完美的。感謝分享這麼棒的知識。 +1和接受和賞金是美國 – Pankaj