当前位置: 首页 > 知识库问答 >
问题:

volley POST json对象并从RESTful API接收json对象

龙昊焱
2023-03-14

我想发送一个以json数据为主体的POST请求到一个REST api,接收一个json响应。我使用的是JsonObjectRequest,我理解在JsonObjectRequest构造函数中设置一个jsonObject将请求作为POST发送,否则将作为GET发送。我试着在postman上执行这个请求,它工作得很好,但是在android上,它给了我错误405(方法不允许)。REST API还要求我将content-type:application/json作为头发送。下面是我的代码:

JsonObjectRequest req = new JsonObjectRequest(LOGIN_ENDPOINT , payload,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {                           
                    pDialog.dismiss();
                    new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.SUCCESS_TYPE)
                            .setTitleText("Response")
                            .setContentText(response.toString())
                            .setConfirmText("Ok")
                            .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                                @Override
                                public void onClick(SweetAlertDialog sweetAlertDialog) {
                                    sweetAlertDialog.dismiss();

                                }

                            })
                            .show();

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {                
        pDialog.dismiss();
        new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE)
                .setTitleText("Error")
                .setContentText(VolleyErrors.getVolleyErrorMessages(error, LoginActivity.this))                        
                .setConfirmText("Ok")
                .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                    @Override
                    public void onClick(SweetAlertDialog sweetAlertDialog) {
                        sweetAlertDialog.dismiss();

                    }

                })
                .show();
    }
}){
    @Override
    public byte[] getBody() {
        return payload.toString().getBytes();

    }

    @Override
    public String getBodyContentType() {
        return "application/json; charset=utf-8";
    }

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


RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this);

requestQueue.add(req);

共有1个答案

东方建修
2023-03-14

尝试跟随...

 Map<String, String> params = new HashMap<String, String>();   

     //Pass Payload as JSON object like this

       params.put("user_id", user_id);
       params.put("user_password", password);

 JSONObject payload= new JSONObject(params);


 JsonObjectRequest req = new JsonObjectRequest(Method.POST,LOGIN_ENDPOINT,payload,new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            try {                           
                pDialog.dismiss();
                new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.SUCCESS_TYPE)
                        .setTitleText("Response")
                        .setContentText(response.toString())
                        .setConfirmText("Ok")
                        .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                            @Override
                            public void onClick(SweetAlertDialog sweetAlertDialog) {
                                sweetAlertDialog.dismiss();
                            }
                        })
                        .show();

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {                

          pDialog.dismiss();
          new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE)
            .setTitleText("Error")
            .setContentText(VolleyErrors.getVolleyErrorMessages(error, LoginActivity.this))                        
            .setConfirmText("Ok")
            .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {

            @Override
            public void onClick(SweetAlertDialog sweetAlertDialog) {
                      sweetAlertDialog.dismiss();
                  }
          })
            .show();
         }
       }) {

       @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 requestQueue = Volley.newRequestQueue(LoginActivity.this);

   requestQueue.add(req);
 类似资料:
  • 本文向大家介绍Spring mvc 接收json对象,包括了Spring mvc 接收json对象的使用技巧和注意事项,需要的朋友参考一下 本文通过代码实例介绍spring mvc 接收json数据的方法,具体详情如下所示: 接收JSON 使用 @RequestBody 注解前台只需要向 Controller 提交一段符合格式的 JSON,Spring 会自动将其拼装成 bean。 1)在上面的项

  • 在我的控制器类a中,我有以下方法: 问题是当我通过执行发送时: 我得到,就像我没有发送JSON一样。当我将更改为时,控制器工作正常。 正如评论中所建议的那样,我错误地使用了JSON。但是,即使使用了正确的代码,如,代码也不能正常工作。

  • 我有两个json对象,请不要是字符串,我想将它们组合成一个json对象,如下所示。 两个对象: 预期结果: 有没有一种优雅的方法可以做到这一点?我的意思是,不提取每支笔和每本书的值,然后使用以下方法将它们重新插入包 我正在使用org。科德豪斯。抛弃json。JSONObject,如果需要该信息。

  • 本文向大家介绍详解SpringMVC @RequestBody接收Json对象字符串,包括了详解SpringMVC @RequestBody接收Json对象字符串的使用技巧和注意事项,需要的朋友参考一下 页面提交请求参数有两种,一种是form格式提交,一种json格式提交 通常情况下我们使用的都是form格式提交的数据,数据格式:k=v&k=v,这个时候用springMVC接收参数没有问题,但有时

  • 本文向大家介绍Springmvc发送json数据转Java对象接收,包括了Springmvc发送json数据转Java对象接收的使用技巧和注意事项,需要的朋友参考一下 1、导包 基于maven 2、jsp代码 3、控制器代码 4、配置json转换器 如果不使用注解驱动<mvc:annotation-driven />,就需要给处理器适配器配置json转换器 在springmvc.xml配置文件中,

  • 我正在使用一个可打包对象来传递一个意图。我的对象看起来是这样的 公共类配方实现Parcelable{private List Recipe=null;private List firedents=null;private String preparation; 我调试了这部分代码,我知道sendRecipe对象是实例化的,数据是正确的。所以我把这个东西放在意向性上,然后把它发送到下一个活动 在这个