Post json 使用 Volley 作为字符串发送到服务器

Post json as string to server using Volley

我正在尝试将 JSON 作为字符串(而不是对象)发送到服务器(在本例中是 WebAPI)。我总是收到错误代码 500。

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

现在,我尝试发送一个 POST 请求,其中 JSON 作为字符串。为此,我尝试

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

我不明白应该在请求中将 json 传递到哪里。或者我做错了什么。

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);

尝试以这种方式制作 post(它应该适用于 json obj 或数组)

我不太明白为什么要将 JSON 作为字符串而不是 object 发送。尽管如此,在您的 WebAPI 端点中,您应该在 ApiController 的 Post 方法中放置一个断点,并查看请求是否到达那里。

您可能正在混合请求的 content-types。如果你想从 Volley 发送一个简单的字符串请求,你应该只使用 StringRequest 并发送 JSON 文本。因此,在 WebAPI POST 方法中,您必须在不反序列化为 JSON 的情况下获取字符串。我曾经回答过一个类似的问题,即应该如何提出这个字符串请求 here

但是,正如我之前所说,我建议始终使用包含 contentType:"application/json" header 的 JSON 请求,并在反序列化的 WebAPI 中接收请求。