将 json 对象添加到对 C# WebApi 的 Java HttpGet 请求
add json object to Java HttpGet request to C# WebApi
我正在尝试将 json 对象从 java 客户端发送到 C# WebApi,但输入参数为空。
java 代码:
ObjectMapper mapper = new ObjectMapper();
Gson gson = new Gson();
String json = gson.toJson(per);
HttpClient httpclient = new DefaultHttpClient();
List<NameValuePair> qparams = new ArrayList<NameValuePair>();
qparams.add(new BasicNameValuePair("person", json.toString()));
HttpGet httpPost = new HttpGet("http://naviserver.azurewebsites.net/api/Person/Get?" + URLEncodedUtils.format(qparams, "UTF-8"));
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader(
"Authorization",
"Bearer TokenRemovedBecauseUseless");
org.apache.http.HttpResponse httpResponse = httpclient.execute(httpPost);
WebApi 方法:
public List<String> Get([FromUri]Person person)
{}
谁能告诉我如何发送 json 对象?
问题在于 WebApi 不期望 JSON 格式的人员对象。通过将 FromUri 与复杂对象一起使用,预计 url 对 Person 中的每个字段都有一个查询参数。
有一个很好的例子 here 说明它是如何工作的。
基本上您希望查询参数如下所示:
http://naviserver.azurewebsites.net/api/Person/Get?name=dave&age=30
并在 Java 中:
qparams.add(new BasicNameValuePair("name", person.getName()));
qparams.add(new BasicNameValuePair("age", String.valueOf(person.getAge())));
如果您想以 JSON 格式发送此人,更好的方法是使用 HTTP POST 并在正文中设置 JSON。然后在 WebApi 中,您的方法将如下所示:
public HttpResponseMessage Post([FromBody]Person person)
然后您还必须更改 Java 客户端以发送 POST 请求。
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("http://naviserver.azurewebsites.net/api/Person");
Person person = new Person("dave", 30);
Gson gson = new Gson();
String json = gson.toJson(person);
StringEntity body = new StringEntity(json);
httpPost.setEntity(body);
HttpResponse response = httpClient.execute(httpPost);
我正在尝试将 json 对象从 java 客户端发送到 C# WebApi,但输入参数为空。 java 代码:
ObjectMapper mapper = new ObjectMapper();
Gson gson = new Gson();
String json = gson.toJson(per);
HttpClient httpclient = new DefaultHttpClient();
List<NameValuePair> qparams = new ArrayList<NameValuePair>();
qparams.add(new BasicNameValuePair("person", json.toString()));
HttpGet httpPost = new HttpGet("http://naviserver.azurewebsites.net/api/Person/Get?" + URLEncodedUtils.format(qparams, "UTF-8"));
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader(
"Authorization",
"Bearer TokenRemovedBecauseUseless");
org.apache.http.HttpResponse httpResponse = httpclient.execute(httpPost);
WebApi 方法:
public List<String> Get([FromUri]Person person)
{}
谁能告诉我如何发送 json 对象?
问题在于 WebApi 不期望 JSON 格式的人员对象。通过将 FromUri 与复杂对象一起使用,预计 url 对 Person 中的每个字段都有一个查询参数。
有一个很好的例子 here 说明它是如何工作的。
基本上您希望查询参数如下所示:
http://naviserver.azurewebsites.net/api/Person/Get?name=dave&age=30
并在 Java 中:
qparams.add(new BasicNameValuePair("name", person.getName()));
qparams.add(new BasicNameValuePair("age", String.valueOf(person.getAge())));
如果您想以 JSON 格式发送此人,更好的方法是使用 HTTP POST 并在正文中设置 JSON。然后在 WebApi 中,您的方法将如下所示:
public HttpResponseMessage Post([FromBody]Person person)
然后您还必须更改 Java 客户端以发送 POST 请求。
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("http://naviserver.azurewebsites.net/api/Person");
Person person = new Person("dave", 30);
Gson gson = new Gson();
String json = gson.toJson(person);
StringEntity body = new StringEntity(json);
httpPost.setEntity(body);
HttpResponse response = httpClient.execute(httpPost);