1. 程式人生 > >SpringBoot 使用RestTemplate實現呼叫服務

SpringBoot 使用RestTemplate實現呼叫服務

SpringBoot的搭建可以看一下我之前寫的一篇部落格

準備工作

要使用RestTemplate需要引入依賴,web依賴也可以在建立專案時選擇Web -> Web

<!-- web -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>


<!-- 遠端呼叫 httpclient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>

 注入RestTemplate

  首先需要在Application中加入一個RestTemplate

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class RemoteApplication {
    @Bean //必須new 一個RestTemplate並放入spring容器當中,否則啟動時報錯
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectionRequestTimeout(30 * 1000);
        httpRequestFactory.setConnectTimeout(30 * 3000);
        httpRequestFactory.setReadTimeout(30 * 3000);
        return new RestTemplate(httpRequestFactory);
    }
    public static void main(String[] args) {
        SpringApplication.run(RemoteApplication.class, args);
    }
}

 呼叫服務

  實體類

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class UserEntity {
    @JsonProperty("user_id")
    private Long userId;
    private String name;
    private String phone;
}
import lombok.Data;

@Data
public class Result {
    private Integer code;
    private String message;
}

  controller

import com.cwr.remote.model.db.UserEntity;
import com.cwr.remote.model.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;


@RequestMapping("/remote")
//允許跨域訪問
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
public class RemoteController {
    //自動注入RestTemplate 
    private final RestTemplate restTemplate;

    @Autowired
    public RemoteController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    /**
     * 呼叫遠端服務新增使用者資訊
     *
     * @param userEntity 使用者實體
     * @return
     */
    @PostMapping("/add-user")
    public Result addUser(@RequestBody UserEntity userEntity) {
        HttpEntity<UserEntity> entity = new HttpEntity<>(userEntity);
        ResponseEntity<Result> resultResponseEntity = this.restTemplate.exchange(
                "http://xxx.xxx.xxx.xxx/user/add",
                HttpMethod.POST, entity, Result.class);
        if (resultResponseEntity.getStatusCode() == HttpStatus.OK) {
            return resultResponseEntity.getBody();
        }
        return null;
    }

    /**
     * 呼叫遠端服務查詢單個使用者資訊
     *
     * @param id 使用者id
     * @return
     */
    @GetMapping("/find-user-id/{id}")
    public UserEntity findOne(@PathVariable Long id) {
        ResponseEntity<UserEntity> resultResponseEntity = this.restTemplate.exchange(
                String.format("http://xxx.xxx.xxx.xxx/user/find-id/%s", id),
                HttpMethod.GET, null, UserEntity.class);
        if (resultResponseEntity.getStatusCode() == HttpStatus.OK) {
            return resultResponseEntity.getBody();
        }
        return null;
    }
}

這裡詳細講一下exchange( )方法

public <T> ResponseEntity<T>

           exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, Class<T> responseType) 

  •     url:請求地址,如果需要在url中帶引數,使用String.format(),用%s拼接即可;
  •     method:請求方式,HttpMethod是一個列舉型別,有GET、POST、DELETE等方法;
  •     requestEntity:請求引數,這個主要是POST等有請求體的方法才需要,GET、DELETE等方法可以為null;
  •     responseType:返回資料型別。

測試結果(我使用的是Postman)

相關推薦

SpringBoot 使用RestTemplate實現呼叫服務

SpringBoot的搭建可以看一下我之前寫的一篇部落格 準備工作 要使用RestTemplate需要引入依賴,web依賴也可以在建立專案時選擇Web -> Web <!-- web --> <dependency>    <gr

SpringBoot系列十一:SpringBoot整合Restful架構(使用 RestTemplate 模版實現 Rest 服務調用、Swagger 集成、動態修改日誌級別)

attribute tar ring 動態修改 包含 分布式 restfu pen 負載 1、概念:SpringBoot整合Restful架構 2、背景 Spring 與 Restful 整合才是微架構的核心,雖然在整個 SpringBoot(SpringCloud)之中提

SpringCloud(一) 用springboot實現簡單服務呼叫

分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

springcloud 系列教程三:RestTemplate實現服務呼叫以及Ribbon負載均衡

springcloud 中有兩種呼叫方式,RestTemplate、Fegin。RestTemplate 由 spring 提供,

SpringBoot+SpringCloud實現登錄用戶信息在微服務之間的傳遞

ted 標記 document dao fin tis static apach frame 實現思路: 1:準備一個ThreadLocal變量,供線程之間共享。 2:每個微服務對所有過來的Feign調用進行過濾,然後從請求頭中獲取User用戶信息,並存在ThreadLoc

大型電商基於Springboot+Springcloud微服務+Dubbo分散式,JVM虛擬機器,併發原理程式設計,實現服務架構

大型電商基於Springboot+Springcloud微服務+Dubbo分散式,JVM虛擬機器,併發原理程式設計,實現微服務架構39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設

Springboot 實現 Restful 服務,基於 HTTP / JSON 傳輸

一、執行 springboot-restful 工程 1.資料庫準備 a.建立資料庫 springbootdb: b.建立表 city :(因為我喜歡徒步) c.插入資料 springboot-restful 工程專案結構介紹 spri

基於SpringBoot和SpringCloud實現服務架構

Spring 頂級框架 spring IO platform 用於系統部署,是可整合的,構建現代化應用的版本平臺,具體來說當你使用maven dependency引入spring jar包時它就在工作了。 Spring Boot 旨在簡化建立產品級的 Spring 應

Spring Boot2.0實現服務呼叫

服務提供者:提供對應的介面實現方法 服務消費者:建立對應的方法介面(表明指向服務提供者),並在控制器中呼叫 ======================================= 服務提供者:   建立控制器(實現介面內容) @Res

springboot2.0+Elastic Job動態job配置實現服務呼叫

springboot2.0+Elastic Job實現微服務呼叫 本猿第一次寫部落格,寫的不好勿噴 一、前提 本文只介紹如何把elastic-job和springcloud微服務整合,不對其他知識做介紹,需先掌握以下知識 1.會使用springboot 2.會使用springcl

springboot整合mail實現郵件服務

1,新建mailconfig類,對郵件服務固定配置進行實體封裝: import java.util.Properties; import org.springframework.beans.factory.annotation.Value; import org.springframework.con

使用Spring框架實現遠端服務暴露與呼叫

一、前言 Spring框架提供了通過HTTP協議實現遠端呼叫的方式,具體是呼叫方使用HttpInvokerProxyFactoryBean生成一個代理物件,通過代理物件遠端通過http服務呼叫服務提供方法的服務,服務提供方則通過HttpInvokerServiceExporter在服務端暴漏遠

使用Zipkin和Brave 實現dubbo服務呼叫跟蹤

git專案地址:https://github.com/blacklau/http-dubbo-zipkin(點選開啟連結),請下載使用。 本工程通過模擬訂單詳情的查詢,演示系統的呼叫鏈跟蹤,跟蹤資訊包括呼叫服務及請求引數。 涉及的各工程作用: louie-webap

RestTemplate實現不同專案的RESTful呼叫

概述         因要實現不同專案之間的RESTful介面呼叫,後來發現RestTemplate很好用,這裡先簡單使用。 專案搭建         搭建很簡單,可以參

spring mvc 實現遠端服務呼叫的幾種方式

org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 實現遠端服務呼叫 (1)httpinvoker方式 伺服器客戶端都是spring時推薦這種方式 服務端 必須要實現 bean實體類

基於SpringBoot開發一個Restful服務實現增刪改查功能

ner github上 epo column dex typealias odin 開發人員 java 在去年的時候,在各種渠道中略微的了解了SpringBoot,在開發web項目的時候是如何的方便、快捷。但是當時並沒有認真的去學習下,畢竟感覺自己在Struts和Spr

SpringBoot + Dubbo + Mybatis 實現分散式服務

SpringBoot + Dubbo + Mybatis 實現分散式服務 springboot   springboot  springboot    springboot  springboot&nb

Maven+SpringMVC+CXF整合實現webservice服務的釋出與呼叫

今天有時間把之前遺留的內容給寫一下,一直想把webservice服務的釋出整合說一下,但是總是忘記了,最近有做了一些關於這一塊的東西,就總結下,來記錄一下。 簡述: WebService開源框架的選擇, 目前主流的Web Service框架主要有3種: Axis 2, CX

springboot+dubbo+myBatis實現服務整合

程式碼下載:https://download.csdn.net/download/typ1805/10485048 微服務架構成了當下的技術熱點,實現微服務是要付出很大成本的,但也許是因為微服務的優點太過於吸引人,以至於大部分開發者都將它當成未來的發展趨勢。 微服務架構的演進

jax-ws實現Webservice入門教程 (客戶端呼叫服務實現)

前兩節中簡單的介紹了一下基本的JAX-WS API的使用,這一節更進一步的介紹一些其他的內容 一、wsimport工具的使用 在第二節中(http://liugang594.iteye.com/blog/1343608),可以看到要手動建立一個client端進行一次正確的呼叫,需要關注的東西還是挺