Volley Post with JSON - 获取 422 状态码
Volley Post with JSON - getting 422 Status Code
我正在尝试使用 Volley to send a JSON object to a Loopback application API which is using MongoDB. I can see that the data is being saved in the database successfully. But the Volley response always shows that the status code is 422。有人可以指出我做错了什么吗?
这是错误信息:
BasicNetwork.performRequest: Unexpected response code 422 for http://localhost:3001/api/Persons
这是我要发送的JSON:
{
"map_coordinates": {
"lat": xxxxxx,
"lng": xxxxxxx
},
"first_name": "xxxxx",
"middle_name": "",
"family_name": "xxxxxx",
"gender": "xxxxxx",
"role": "xxxxxx",
"dob": "2017-09-28T05:51:40.836Z",
"picture_of_person": "",
"username": "ajxxxx7@gmail.com",
"deviceToken": "xxxxxxxx",
"portal_address": "xxxxx",
"email": "ajxxxxx7@gmail.com",
"password": "xxxxxxx",
"vcode": 562991,
"mobile": "+91xxxxxxxx"
}
我认为 JSON 没有问题,因为如果我 POST 来自 Loopback 资源管理器的相同对象,则请求成功通过并且 returns 状态代码 200.
这是我用来发送 JSON 请求的代码。
public void postJsonRequest(String url, JSONObject data, final Callback<JSONObject, VolleyError> callback) {
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.POST,
url, data, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
callback.onSuccess(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onFailure(error);
}
});
makeJsonRequest(objectRequest);
}
private void makeJsonRequest(JsonObjectRequest request) {
RequestQueue queue = Volley.newRequestQueue(EngageMyTime.getInstance().getEMTContext());
queue.add(request);
}
任何 help/idea 将不胜感激。
你回复的是什么格式?如果您不能使用 JSON,您可能会看到此错误。因为 postJSONResponse 在解析时使用了 JSONObject。像这样的东西。您可以编写自定义请求或将响应类型更改为 JSON。
自定义请求示例为:
public class SignUpRequest extends Request<String> {
private Map<String, String> mParams;
public SignUpRequest(String url, Response.ErrorListener listener) {
super(url, listener);
}
public SignUpRequest(int method, String url,String email,String userName,String password, Response.ErrorListener listener) {
super(method, url, listener);
mParams=new HashMap<>();
mParams.put("username",userName);
mParams.put("email",email);
mParams.put("password",password);
}
@Override
protected void deliverResponse(String response) {
Log.e("Response",response);
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return mParams;
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String data=new String(response.data);
return Response.success(data+" "+response.statusCode,
HttpHeaderParser.parseCacheHeaders(response));
}
}
尝试在服务器端设置默认字符集 UTF-8,并在发送前用 UTF-8 编码 json 数据
在android和
URLEncoder.encode(string,"UTF-8");
我正在尝试使用 Volley to send a JSON object to a Loopback application API which is using MongoDB. I can see that the data is being saved in the database successfully. But the Volley response always shows that the status code is 422。有人可以指出我做错了什么吗?
这是错误信息:
BasicNetwork.performRequest: Unexpected response code 422 for http://localhost:3001/api/Persons
这是我要发送的JSON:
{
"map_coordinates": {
"lat": xxxxxx,
"lng": xxxxxxx
},
"first_name": "xxxxx",
"middle_name": "",
"family_name": "xxxxxx",
"gender": "xxxxxx",
"role": "xxxxxx",
"dob": "2017-09-28T05:51:40.836Z",
"picture_of_person": "",
"username": "ajxxxx7@gmail.com",
"deviceToken": "xxxxxxxx",
"portal_address": "xxxxx",
"email": "ajxxxxx7@gmail.com",
"password": "xxxxxxx",
"vcode": 562991,
"mobile": "+91xxxxxxxx"
}
我认为 JSON 没有问题,因为如果我 POST 来自 Loopback 资源管理器的相同对象,则请求成功通过并且 returns 状态代码 200.
这是我用来发送 JSON 请求的代码。
public void postJsonRequest(String url, JSONObject data, final Callback<JSONObject, VolleyError> callback) {
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.POST,
url, data, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
callback.onSuccess(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onFailure(error);
}
});
makeJsonRequest(objectRequest);
}
private void makeJsonRequest(JsonObjectRequest request) {
RequestQueue queue = Volley.newRequestQueue(EngageMyTime.getInstance().getEMTContext());
queue.add(request);
}
任何 help/idea 将不胜感激。
你回复的是什么格式?如果您不能使用 JSON,您可能会看到此错误。因为 postJSONResponse 在解析时使用了 JSONObject。像这样的东西。您可以编写自定义请求或将响应类型更改为 JSON。 自定义请求示例为:
public class SignUpRequest extends Request<String> {
private Map<String, String> mParams;
public SignUpRequest(String url, Response.ErrorListener listener) {
super(url, listener);
}
public SignUpRequest(int method, String url,String email,String userName,String password, Response.ErrorListener listener) {
super(method, url, listener);
mParams=new HashMap<>();
mParams.put("username",userName);
mParams.put("email",email);
mParams.put("password",password);
}
@Override
protected void deliverResponse(String response) {
Log.e("Response",response);
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return mParams;
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String data=new String(response.data);
return Response.success(data+" "+response.statusCode,
HttpHeaderParser.parseCacheHeaders(response));
}
}
尝试在服务器端设置默认字符集 UTF-8,并在发送前用 UTF-8 编码 json 数据
在android和
URLEncoder.encode(string,"UTF-8");