在邮递员中获取响应代码200但在Android网络库中没有

时间:2017-01-30 12:07:28

标签: android android-volley retrofit2 internal-server-error

我有一个POST方法API,它在 Postman 中提供了200个响应代码,但在使用 Volley 甚至在 Retrofit2 中调用api时却没有

这是邮差截图:

enter image description here

这是我为 Volley 库代码所做的:

final String url = "http://xxxxxxxx.com/api/mobile/user/post/";

    StringRequest stringReq = new StringRequest(Request.Method.POST, url,
            new com.android.volley.Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.e("onResponse ===", response + " " );
                }
            },
            new com.android.volley.Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("onErrorResponse ===", error + " " );
                }
            }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("Authorization", "xxxxxxxxxxxxx");
            return params;
        }

        @Override
        public Map<String, String> getParams() {
            HashMap<String, String> params = new HashMap<>();
            params.put("post_body", "test");
            return params;
        }
    };

    // Adding request to request queue
    mApp.addToRequestQueue(stringReq);
    stringReq.setRetryPolicy(new DefaultRetryPolicy(
            REQUEST_TIME,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

错误 Logcat:

BasicNetwork.performRequest: Unexpected response code 500 for http://xxxxxxxxxxx.com/api/mobile/user/post/

3 个答案:

答案 0 :(得分:6)

问题是您的端点假设multipart/form-data请求(在邮递员中将橙色图钉设置为form-data单选按钮),而Volley的默认内容类型为{ {1}}为StringRequest,这就是您收到500错误的原因。

因此,如果你只想在多部分请求中发送POST参数,请检查this answer。但是,如果您还想发送文件,请查看another answer

答案 1 :(得分:0)

为什么不使用JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, JSONObject, response, error);发帖请求它易于使用尝试一次

答案 2 :(得分:-1)

我也遇到了使用的相同问题

 @Override
 public Map<String, String> getHeaders() throws AuthFailureError {
  final Map<String, String> headers = new HashMap<>();
  headers.put("Content-Type", "application/json");
  return headers;
 }