我有一个POST方法API,它在 Postman 中提供了200个响应代码,但在使用 Volley 甚至在 Retrofit2 中调用api时却没有
这是邮差截图:
这是我为 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/
答案 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;
}