使用JSON的Volley Post - 获得422状态代码

时间:2018-05-18 11:40:10

标签: java android json android-volley loopbackjs

我正在尝试使用Volley将JSON对象发送到使用MongoDB的Loopback应用程序API。我可以看到数据已成功保存在数据库中。但是,Volley响应总是显示状态代码为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没有问题,因为如果我从Loopback资源管理器发布相同的对象,那么请求会成功通过并返回状态代码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);
}

任何帮助/想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试在服务器端设置默认字符集UTF-8,并在发送前以UTF-8编码json数据

在android中

URLEncoder.encode(string,"UTF-8");

答案 1 :(得分:0)

您使用什么格式作为回应?如果你不能使用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));
    }
}
相关问题