Content-Type: text/plain,application/json;
1、如果发送过来的Content-Type是text/plain类型的话,
@RequestBody要用到String的参数类型接收
2、如果是application/json类型的话,就需要使用我们在springmvc中设置的json的默认格式的类型数据去进行接收,一般是Map类型。
附上测试代码:
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import com.google.gson.Gson;
/**
* @author zhaoyutao
* @version 2015年12月4日 下午3:45:11
* 用来模拟接口调用,支持get和post
*/
public class App {
HttpClient client = HttpClientBuilder.create().build();
HttpUriRequest request = null;
HttpResponse response = null;
HttpEntity entity = null;
private String utf8 = "UTF-8";
private void get(String url, Map<String, String> params){
try {
url = addGetParam(url, params);
request = new HttpGet(url);
response = client.execute(request);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
} else {
System.out.println("访问失败 : " + response.getStatusLine().getStatusCode());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void post(String url, Map<String, String> params){
try {
request = new HttpPost(url);
addPostStringEntity(request, params);
response = client.execute(request);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
} else {
System.out.println("访问失败 : " + response.getStatusLine().getStatusCode());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = "http://192.168.0.105/cuohe/dealMakerConversation/queryCustomerByCompanyName.do";
Map<String, String> map = new HashMap<String, String>();
map.put("companyName", "上海");
map.put("itemId", "26276");
if(args[0].toString().equals("get")){
new App().get(url, map);
} else if(args[0].toString().equals("post")){
new App().post(url, map);
} else {
System.out.println("error Param!");
}
}
/** 将参数拼接到url的后面
* @param url
* @param params
* @return 拼接完成的url
* @throws UnsupportedEncodingException
*/
private String addGetParam(String url, Map<String, String> params) throws UnsupportedEncodingException {
// 没有参数,直接返回
if(params == null || params.size() == 0){
return url;
}
boolean firstParam = Boolean.TRUE;
String prefix = "";
for(Entry<String, String> entry : params.entrySet()){
// 第一个参数,前缀为?
if(firstParam){
prefix = "?";
firstParam = Boolean.FALSE;
} else {
prefix = "&";
}
url += prefix + entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), utf8);
}
return url;
}
@SuppressWarnings("unused")
private HttpUriRequest addPostParam(HttpUriRequest request, Map<String, String> params) throws UnsupportedEncodingException {
HttpPost post = (HttpPost) request;
if(params == null || params.size() == 0){
return post;
}
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
for(Entry<String, String> entry : params.entrySet()){
nameValuePairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
post.setEntity(new UrlEncodedFormEntity(nameValuePairs, utf8));
return post;
}
/** 将文本以text内容的方式发送到服务器,使用Content-Type指定文本类型
* @param request
* @param params
* @return
* @throws UnsupportedEncodingException
*/
private HttpUriRequest addPostStringEntity(HttpUriRequest request, Map<String, String> params) throws UnsupportedEncodingException {
HttpPost post = (HttpPost) request;
if(params == null || params.size() == 0){
return post;
}
// post.setHeader("Content-Type", "text/plain"); //服务器端使用String类型接收参数
post.setHeader("Content-Type", "application/json"); //服务器端使用json类型接收参数
post.setEntity(new StringEntity(new Gson().toJson(params), utf8));
return post;
}
}