对于RestTemplate相对比较陌生,我记得我只是使用过httpClient,突然遇到这个东西,很迷茫,网上搜了一下,看着是和httpClient实现的功能差不多,具体的差异这里就不说了,可以自行百度,我这里只记录一下我项目中遇到的问题。
使用这个RestTemplate最大的问题,除了学习用法之外,还要适应现在的接口接收参数,因为要发送的接口已经在使用,所以要符合现有接口规则(忍不住吐糟一下,接收参数真是太乱,头一次遇到)。这里记录就以模拟伪代码的形式:
1.比如,现有一接口,是post形式,参数是实体类
@PostMapping
public String a(@RequestBody 实体类 名){}
用RestTemplate请求这样的接口,我用这样的方式
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", “依据项目而定”);
headers.add("Content-Type", "application/json");
HttpEntity<实体类> entity = new HttpEntity<>(实体类, headers);
//方法一,底层也是方法二的实现
Result result = restTemplate.postForObject(url, entity, Result.class);
//方法二
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class, "");
注:写法也不止这么多,还需要依据情况而定,get形式的这里就不做栗子了,目前还没有遇到问题,接收形式都差不多。
2.这个问题是比较蒙圈的,因为我搜索的栗子,基本都是需要接收接口里的参数有注解的,可是遇到一个接口里的参数没有注解,这就让我很迷茫了,突然间不知道该怎么做了,然后就是用笨方法,各种试,各种搜,功夫不负有心人,还是解决了(ps:还是要多读相关的文档)。
问题:post请求接口,参数是String的,没有任何的注解。
@PostMapping
public String a(String 名){}
用RestTemplate请求这样的接口,需用这样的方式
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", “以实际情况为准”);
//这个可以自行了解,key可以对应多个value,参数用这个传输,要不然接收不到
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add("String", string参数值);
// HttpEntity<String> entity = new HttpEntity<>( headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers), String.class, "");
以上是初步学习使用RestTemplate过程中遇到的问题,记录一下,作为学习的笔记。
推荐一下,这个比较全面,可以看一下: