Java 正在尝试发布到自定义API,收到volley.ClientError

Java 正在尝试发布到自定义API,收到volley.ClientError,java,android,rest,android-volley,Java,Android,Rest,Android Volley,我正试图发布一些数据一个自定义的API使用截击。这就是API的模型,我也在尝试更新它的信息。可在以下帖子链接下找到: 当我尝试向API添加新的测试用户时,我收到以下错误: E/Volley: [9583] BasicNetwork.performRequest: Unexpected response code 400 for http://ecoproduce.eu/api/User/register/ E/Error response: com.android.volley.ClientEr

我正试图发布一些数据一个自定义的API使用截击。这就是API的模型,我也在尝试更新它的信息。可在以下帖子链接下找到:

当我尝试向API添加新的测试用户时,我收到以下错误:

E/Volley: [9583] BasicNetwork.performRequest: Unexpected response code 400 for http://ecoproduce.eu/api/User/register/
E/Error response: com.android.volley.ClientError
这是我用来发布用户的函数

private void addUser() {

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    JsonArrayRequest arrayRequest = new JsonArrayRequest(
            Request.Method.POST,
            "http://ecoproduce.eu/api/User/register/",
            null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Error response", error.toString());
                }
            })

            {
                @Override
                protected Map<String,String> getParams() {

                    Map<String,String> params = new HashMap<String,String>();
                    params.put("firstName", "Vasko");
                    params.put("lastName", "Vasilev");
                    params.put("email", "vasko@hotmail.com");
                    params.put("password", "18yoBonev");
                    params.put("zipCode", "0");
                    params.put("state", "1");
                    params.put("account", "2");

                    return params;
                }

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

            };

    requestQueue.add(arrayRequest);

}
private void addUser(){
RequestQueue RequestQueue=Volley.newRequestQueue(this);
JsonArrayRequest arrayRequest=新JsonArrayRequest(
Request.Method.POST,
"http://ecoproduce.eu/api/User/register/",
无效的
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“错误响应”,Error.toString());
}
})
{
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“名字”、“瓦斯科”);
参数put(“姓氏”、“瓦西里夫”);
参数put(“电子邮件”)vasko@hotmail.com");
参数put(“密码”、“18yoBonev”);
参数put(“zipCode”,“0”);
参数put(“状态”、“1”);
参数卖出价(“账户”、“2”);
返回参数;
}
@凌驾
公共映射getHeaders()引发AuthFailureError{
HashMap headers=新的HashMap();
headers.put(“内容类型”、“应用程序/json;字符集=utf-8”);
返回标题;
}
};
添加(arrayRequest);
}

我曾尝试寻找解决方案,但没有找到任何有用的方法。可能是因为我试图将zipCode、state和account作为字符串传递,即使它们在模型中是整数,也会发生错误吗?如果是这样,如何将它们作为整数传递?目前我正在重写getParams()函数,该函数必须返回一个映射实例。如果这个问题有一个简单的解决方案,我想提前道歉,这是我第一次使用RESTful API。

通过使用字符串请求解决。答案如下:

当前代码如下所示:

 private void addUser() {

    JSONArray jsonArray = new JSONArray();
    JSONObject jsonObject = new JSONObject();

    try {
        jsonObject.put("firstName", "Vasko");
        jsonObject.put("lastName", "Vasilev");
        jsonObject.put("email", "vaskovaskovasko@hotmail.com");
        jsonObject.put("password", "18yoBonev");
        jsonObject.put("zipCode", 0);
        jsonObject.put("state", 1);
        jsonObject.put("account", 2);

        jsonArray.put(jsonObject);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    final String requestBody = jsonObject.toString();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ecoproduce.eu/api/User/register", new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("VOLLEY", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VOLLEY", error.toString());
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() {
            try {
                return requestBody == null ? null : requestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
                // can get more details such as response.headers
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };

    requestQueue.add(stringRequest);
}
private void addUser(){
JSONArray JSONArray=新的JSONArray();
JSONObject JSONObject=新的JSONObject();
试一试{
jsonObject.put(“名字”、“瓦斯科”);
jsonObject.put(“姓氏”、“瓦西里夫”);
jsonObject.put(“电子邮件”vaskovaskovasko@hotmail.com");
jsonObject.put(“密码”、“18yoBonev”);
jsonObject.put(“zipCode”,0);
jsonObject.put(“状态”,1);
jsonObject.put(“账户”,2);
jsonArray.put(jsonObject);
}捕获(JSONException e){
e、 printStackTrace();
}
RequestQueue RequestQueue=Volley.newRequestQueue(this);
最后一个字符串requestBody=jsonObject.toString();
StringRequest StringRequest=新的StringRequest(Request.Method.POST)http://ecoproduce.eu/api/User/register,新的响应。侦听器(){
@凌驾
公共void onResponse(字符串响应){
Log.i(“截击”,回应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“截击”,error.toString());
}
}) {
@凌驾
公共字符串getBodyContentType(){
返回“application/json;charset=utf-8”;
}
@凌驾
公共字节[]getBody(){
试一试{
return requestBody==null?null:requestBody.getBytes(“utf-8”);
}捕获(不支持的编码异常uee){
wtf(“尝试使用%s获取%s的字节时不支持编码”,请求体,“utf-8”);
返回null;
}
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
字符串responseString=“”;
if(响应!=null){
responseString=String.valueOf(response.statusCode);
//可以获取更多详细信息,如response.headers
}
返回Response.success(responseString,HttpHeaderParser.parseCacheHeaders(Response));
}
};
添加(stringRequest);
}

Volley无法处理https请求,也许此链接可以帮助您:

或者添加以下行
android:usesCleartextTraffic=“true”

如果您想授权Http纯文本,请发送到您的清单。

帖子是JSONObject,因此尝试使用
JSONObject请求
而不是
JsonArrayRequest
 private void addUser() {

    JSONArray jsonArray = new JSONArray();
    JSONObject jsonObject = new JSONObject();

    try {
        jsonObject.put("firstName", "Vasko");
        jsonObject.put("lastName", "Vasilev");
        jsonObject.put("email", "vaskovaskovasko@hotmail.com");
        jsonObject.put("password", "18yoBonev");
        jsonObject.put("zipCode", 0);
        jsonObject.put("state", 1);
        jsonObject.put("account", 2);

        jsonArray.put(jsonObject);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    final String requestBody = jsonObject.toString();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ecoproduce.eu/api/User/register", new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("VOLLEY", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VOLLEY", error.toString());
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() {
            try {
                return requestBody == null ? null : requestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
                // can get more details such as response.headers
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };

    requestQueue.add(stringRequest);
}