Post json 使用 Volley 作为字符串发送到服务器
Post json as string to server using Volley
我正在尝试将 JSON 作为字符串(而不是对象)发送到服务器(在本例中是 WebAPI)。我总是收到错误代码 500。
当请求为 GET 且未向服务器发送数据时,我成功地从服务器获得了响应。这是通过 JsonObjectRequest 实现的。
现在,我尝试发送一个 POST 请求,其中 JSON 作为字符串。为此,我尝试
- JsonObjectRequest
- 字符串请求
- GsonRequest
- JsonRequest - 这里我在 requestBody
中提供了我的 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 中接收请求。
我正在尝试将 JSON 作为字符串(而不是对象)发送到服务器(在本例中是 WebAPI)。我总是收到错误代码 500。
当请求为 GET 且未向服务器发送数据时,我成功地从服务器获得了响应。这是通过 JsonObjectRequest 实现的。
现在,我尝试发送一个 POST 请求,其中 JSON 作为字符串。为此,我尝试
- JsonObjectRequest
- 字符串请求
- GsonRequest
- JsonRequest - 这里我在 requestBody 中提供了我的 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 中接收请求。