Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用json正文和url参数发送http post?_Java_Json_Http_Post - Fatal编程技术网

Java 如何使用json正文和url参数发送http post?

Java 如何使用json正文和url参数发送http post?,java,json,http,post,Java,Json,Http,Post,我看到了这个 我想发送一个POST http请求,在正文中包含json和url参数 如果我遵循教程中的示例 第二个setEntity是否会覆盖第一个setEntity 如果是这样,我应该如何编写它?setEntity只设置当前实体,而不像setHeader方法那样附加到当前实体 HTTP不允许发布多个实体,这正是您试图做的 我建议将所有数据编译成一个JSONStringEntity,然后发送,或者只是将所有内容添加到UrlEncodedFormEntity String json = "{"us

我看到了这个

我想发送一个POST http请求,在正文中包含json和url参数

如果我遵循教程中的示例

第二个
setEntity
是否会覆盖第一个
setEntity


如果是这样,我应该如何编写它?

setEntity只设置当前实体,而不像
setHeader
方法那样附加到当前实体

HTTP不允许发布多个实体,这正是您试图做的

我建议将所有数据编译成一个JSON
StringEntity
,然后发送,或者只是将所有内容添加到
UrlEncodedFormEntity

String json = "{"username":"John", "password":"pass", "id":1, "name":"John"}";
StringEntity entity = new StringEntity(json);
httpPost.setEntity(entity)
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");

List params=new ArrayList();
添加参数(新的BasicNameValuePair(“用户名”、“约翰”));
参数添加(新的BasicNameValuePair(“密码”、“通行证”);
参数添加(新的BasicNameValuePair(“id”,“1”));
参数添加(新的BasicNameValuePair(“名称”、“约翰”));
setEntity(新的UrlEncodedFormEntity(参数);

猜测httpPost是一种WebRequest类型

第二个setEntity会覆盖第一个setEntity吗

是的,会的

要发出post请求,您应该执行以下操作:

httpPost.Method = "POST";
要在body中设置Json对象,请查看对的响应


这样做的目的是什么?您已经在第一个代码中发送了一个
UrlEncodedFormEntity
,您不能在它上面发送任何json。因此,是的,第二个
setEntity
覆盖了第一个。
String json = "{"username":"John", "password":"pass", "id":1, "name":"John"}";
StringEntity entity = new StringEntity(json);
httpPost.setEntity(entity)
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", "John"));
params.add(new BasicNameValuePair("password", "pass"));
params.add(new BasicNameValuePair("id", "1"));
params.add(new BasicNameValuePair("name", "John"));
httpPost.setEntity(new UrlEncodedFormEntity(params);
httpPost.Method = "POST";
string serializedObject = Newtonsoft.Json.JsonConvert.SerializeObject(entity);

using (var writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write(serializedObject);
}
var response = request.GetResponse() as HttpWebResponse;