一个服务访问另外一个服务的技术有很多种,比如feign, dubbo, activemq, ajax+jsonp等,springmvc提供的RestTemplate是其中之一。本文将阐述如何通过RestTemplate去访问另外一个服务的api。
1、前提约束
- 创建springboot项目,提供待访问的api
https://www.jianshu.com/p/de979f53ad80 - 再次创建springboot项目
https://www.jianshu.com/p/1ad292812ab1
2、操作步骤
- 1 启动第一个springboot项目
- 2 在主启动类同级目录下创建RestConfig.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig{
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
}
- 4 在主启动类同级目录下创建RestTemplateController.java
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class RestTemplateController{
@Resource
RestTemplate restTemplate;
@GetMapping("/post")
public String postTest()throws Exception{
// RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> requestMap= new LinkedMultiValueMap<String, String>();
requestMap.add("id", "123");
requestMap.add("name", "ali");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> requestEntity = new HttpEntity<String>(JSONObject.toJSON(requestMap).toString(),headers);
// HttpEntity requestEntity = new HttpEntity(requestMap,null);
String responseAsString = restTemplate.postForObject("http://localhost:8080/post",requestEntity,String.class);
System.out.println(responseAsString);
return "ok";
}
}
@GetMapping("/get")
public String getTest()throws Exception{
//RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> requestMap= new LinkedMultiValueMap<String, String>();
requestMap.add("id", "123");
requestMap.add("name", "ali");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> requestEntity = new HttpEntity<String>(JSONObject.toJSON(requestMap).toString(),headers);
// HttpEntity requestEntity = new HttpEntity(requestMap,null);
ResponseEntity responseEntity = restTemplate.getForEntity("http://localhost:8080/get",Map.class);
System.out.println(responseEntity.getBody());
return "ok";
}
至此,我们完成了通过RestTemplate去访问另外一个服务中get和post的api之测试。
网友评论