使用RestTemplate post请求的时候主要可以通过三种方式实现
1、调用postForObject方法 2、使用postForEntity方法 3、调用exchange方法
postForObject和postForEntity方法的区别主要在于可以在postForEntity方法中设置header的属性,当需要指定header的属性值的时候,使用postForEntity方法。exchange方法和postForEntity类似,但是更灵活,exchange还可以调用get、put、delete请求。使用这三种方法调用post请求传递参数,当接口是表单接收参数的时候,Map不能定义为以下两种类型(url使用占位符进行参数传递时除外),HashMap是以请求体传递,MultiValueMap是表单传递!
-
Map
<
String,
Object
> paramMap
= new HashMap
<
String,
Object
>();
-
-
Map
<
String,
Object
> paramMap
= new LinkedHashMap
<
String,
Object
>();
经过测试,我发现这两种map里面的参数都不能被后台接收到,这个问题困扰我两天,终于,当我把Map类型换成LinkedMultiValueMap后,参数成功传递到后台
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
经过测试,正确的传参方式如下
-
public static void main(
String[] args) {
-
RestTemplate template
= new RestTemplate();
-
String url
=
"http://192.168.2.40:8081/channel/channelHourData/getHourNewUserData";
-
/
/ 封装参数,千万不要替换为Map与HashMap,否则参数无法传递
-
MultiValueMap
<
String,
Object
> paramMap
= new LinkedMultiValueMap
<
String,
Object
>();
-
paramMap.
add(
"dt",
"20180416");
-
-
/
/
1、使用postForObject请求接口
-
String result
= template.postForObject(url, paramMap,
String.
class);
-
System.out.println(
"result1=================="
+ result);
-
-
/
/
2、使用postForEntity请求接口
-
HttpHeaders headers
= new HttpHeaders();
-
HttpEntity
<MultiValueMap
<
String,
Object
>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
-
ResponseEntity
<
String
> response
2
= template.postForEntity(url, httpEntity,
String.
class);
-
System.out.println(
"result2===================="
+ response
2.getBody());
-
-
/
/
3、使用exchange请求接口
-
ResponseEntity
<
String
> response
3
= template.exchange(url, HttpMethod.POST, httpEntity,
String.
class);
-
System.out.println(
"result3===================="
+ response
3.getBody());
-
-
}
GET方式传参说明
如果是get请求,又想要把参数封装到map里面进行传递的话,Map需要使用HashMap,且url需要使用占位符,如下
-
public static void main(
String[] args) {
-
RestTemplate restTemplate
2
= new RestTemplate();
-
String url
=
"http://127.0.0.1:8081/interact/getData?dt={dt}&ht={ht}";
-
-
/
/ 封装参数,这里是HashMap
-
Map
<
String,
Object
> paramMap
= new HashMap
<
String,
Object
>();
-
paramMap.put(
"dt",
"20181116");
-
paramMap.put(
"ht",
"10");
-
-
/
/
1、使用getForObject请求接口
-
String result
1
= template.getForObject(url,
String.
class, paramMap);
-
System.out.println(
"result1===================="
+ result
1);
-
-
/
/
2、使用exchange请求接口
-
HttpHeaders headers
= new HttpHeaders();
-
headers.
set(
"id",
"lidy");
-
HttpEntity
<MultiValueMap
<
String,
Object
>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(null,headers);
-
ResponseEntity
<
String
> response
2
= template.exchange(url, HttpMethod.
GET, httpEntity,
String.
class,paramMap);
-
System.out.println(
"result2===================="
+ response
2.getBody());
-
}
原文链接:https://blog.csdn.net/LDY1016/article/details/80002126