使用Volley将JSON作为字符串发布到服务器

3

我试图将JSON作为字符串(而不是对象)发送到服务器(在这种情况下,它是WebAPI)。我总是得到错误代码500。

当请求为GET并且没有向服务器发送数据时,我成功地从服务器获得了响应。这通过JsonObjectRequest实现。

现在,我正在尝试发送带有JSON字符串的POST请求。为此,我尝试了以下方法:

  • JsonObjectRequest
  • StringRequest
  • GsonRequest
  • JsonRequest-在这里我提供了我的json作为requestBody

在使用volley之前,我使用其他方法向服务器发送请求,这需要简单构建一个对象,序列化为JSON(字符串)并通过StringEntity传递。

我无法理解应该在请求中传递json的位置。或者我做错了什么。

2个回答

3
我不太明白为什么你想将JSON作为字符串而不是对象发送。无论如何,在您的WebAPI端点中,您应该在ApiController的Post方法中设置断点,看看请求是否到达那里。
可能,您正在混合请求的内容类型。如果您想从Volley发送一个简单的字符串请求,您应该只使用StringRequest,并在那里发送JSON文本。因此,在WebAPI POST方法中,您必须获取字符串,而不需要将其反序列化为JSON。我曾经回答过类似问题,关于如何进行这种字符串请求here
但是,正如我之前所说,我建议始终使用包含contentType:“application / json”标题的JSON请求,并在WebAPI中接收反序列化的请求。

1
问题解决了!谢谢 :) 我的问题出在头文件上。一旦我删除了头文件并使用了JsonObjectRequest,它就可以工作了!@GoRos - Ido

0
url = "yoururl"; StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
new Response.Listener<String>() 
{
    @Override
    public void onResponse(String response) {
        // response
        Log.d("Response", response);
    }
}, 
new Response.ErrorListener() 
{
     @Override
     public void onErrorResponse(VolleyError error) {
         // error
         Log.d("Error.Response", response);
   }
} ) {     
@Override
protected Map<String, String> getParams() 
{  
        Map<String, String>  params = new HashMap<String, String>();  
        params.put("your_field", youJSONObject.toString());  

        return params;  
} }; queue.add(postRequest);

尝试以这种方式来创建帖子(它应该可以使用JSON对象或数组)


现在它可以工作了,但是在这种方法中,我需要添加对象的每个单独字段而不是整个对象。我能否发送序列化的JSON而不是每个字段?谢谢您的回答@iwen - Ido
整个对象是什么意思?这样你就可以发送JsonArray(因此你可以发送像jsonobj与jsonarray这样的复杂对象)... 你能更明确一些吗? - Ivan
问题解决了。我的问题在于头文件。不管怎样,还是谢谢 @iwen。 - Ido

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接