30 使用RestTemplate完成访问另外一个服务的api

2020-07-28  本文已影响0人  张力的程序园

一个服务访问另外一个服务的技术有很多种,比如feign, dubbo, activemq, ajax+jsonp等,springmvc提供的RestTemplate是其中之一。本文将阐述如何通过RestTemplate去访问另外一个服务的api。

1、前提约束

2、操作步骤

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());
    }
}
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之测试。

上一篇下一篇

猜你喜欢

热点阅读