欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot RestTemplate GET POST請求的實例講解

 更新時間:2020年09月15日 14:49:37   作者:ouyangjun__  
這篇文章主要介紹了SpringBoot RestTemplate GET POST請求的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一)RestTemplate簡介

RestTemplate是HTTP客戶端庫提供了一個更高水平的API。主要用于Rest服務(wù)調(diào)用。

RestTemplate方法:

方法組 描述

getForObject

通過GET檢索表示形式。

getForEntity

ResponseEntity通過使用GET 檢索(即狀態(tài),標(biāo)頭和正文)。

headForHeaders

通過使用HEAD檢索資源的所有標(biāo)頭。

postForLocation

通過使用POST創(chuàng)建新資源,并Location從響應(yīng)中返回標(biāo)頭。

postForObject

通過使用POST創(chuàng)建新資源,并從響應(yīng)中返回表示形式。

postForEntity

通過使用POST創(chuàng)建新資源,并從響應(yīng)中返回表示形式。

put

通過使用PUT創(chuàng)建或更新資源。

patchForObject

通過使用PATCH更新資源,并從響應(yīng)中返回表示形式。請注意,JDK HttpURLConnection不支持PATCH,但是Apache HttpComponents和其他支持。

delete

使用DELETE刪除指定URI處的資源。

optionsForAllow

通過使用ALLOW檢索資源的允許的HTTP方法。

exchange

前述方法的通用性強(且意見少的版本),在需要時提供了額外的靈活性。它接受RequestEntity(包括HTTP方法,URL,標(biāo)頭和正文作為輸入)并返回ResponseEntity。

這些方法允許使用ParameterizedTypeReference而不是Class使用泛型來指定響應(yīng)類型。

execute

執(zhí)行請求的最通用方法,完全控制通過回調(diào)接口進行的請求準(zhǔn)備和響應(yīng)提取。

二)RestTemplate案例

第一步:創(chuàng)建一個maven項目,在pom.xml引入一個springboot的版本

pom.xml內(nèi)容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.oysept</groupId>
  <artifactId>spring_resttemplate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/>
  </parent>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <mainClass>com.oysept.RestTemplateApplication</mainClass>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

application.yml配置:該配置就一個默認(rèn)端口

server:

port: 8080

創(chuàng)建一個springboot啟動類RestTemplateApplication

package com.oysept;
 
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
 
@SpringBootApplication
public class RestTemplateApplication {
 
  public static void main(String[] args) {
    new SpringApplicationBuilder(RestTemplateApplication.class).run(args);
  }
}

到此步驟時,可以先運行RestTemplateApplication中的main方法,檢驗springboot啟動是否正常。

第二步:創(chuàng)建一個RestTemplate配置類并注入,因為在使用時,不提前注入ResttTemplate,在通過@Autowired使用會報RestTemplate找不到

package com.oysept.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
 
/**
 * 注冊一個RestTemplate Bean, 否則直接通過@Autowired使用會報RestTemplate找不到
 * @author ouyangjun
 */
@Configuration
public class RestTemplateConfig {
 
  /**
   * 方式一: 默認(rèn)是使用JDK原生java.net.HttpURLConnection請求
   * @return
   */
  @Bean(name = "restTemplate")
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }
 
  /**
   * 方式二: 使用apache http內(nèi)置請求, 需要在pom.xml中引入相應(yīng)的apache jar
   * 可以使用HttpClient,設(shè)置一些http連接池等信息
   * @return
   *
  @Bean(name = "restTemplate")
  public RestTemplate restTemplate() {
    return new RestTemplate(new HttpComponentsClientHttpRequestFactory());
  }
   */
 
  /**
   * 方式三: 使用OkHttp內(nèi)置請求, 需要在pom.xml中引入相應(yīng)的OkHttp3 jar
   * 可以使用OkHttpClient,設(shè)置一些http連接池信息
   * @return
   *
  @Bean(name = "restTemplate")
  public RestTemplate restTemplate() {
    return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
  }
  */
}

第三步:創(chuàng)建一個VO類,用于測試入?yún)⒑统鰠?/p>

package com.oysept.vo; 
public class MsgVO { 
  private String msgKey;
  private String msgValue;
 
  public String getMsgKey() {return msgKey;}
  public void setMsgKey(String msgKey) {this.msgKey = msgKey;}
 
  public String getMsgValue() {return msgValue;}
  public void setMsgValue(String msgValue) {this.msgValue = msgValue;}
 
  public String toString() {
    return "MsgVO [msgKey: "+this.msgKey+", msgValue: "+this.msgValue+"]";
  }
}

第四步:創(chuàng)建一個服務(wù)端接口,用于測試

package com.oysept.controller;
 
import java.util.ArrayList;
import java.util.List; 
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import com.oysept.vo.MsgVO;
 
/**
 * 服務(wù)端, 提供接口被調(diào)用
 * @author ouyangjun
 */
@RestController
public class ServerController {
 
  // 無參GET請求: http://localhost:8080/server/get
  @RequestMapping(value = "/server/get", method = RequestMethod.GET)
  public String get() {
    return "/server/get";
  }
 
  // 帶參GET請求: http://localhost:8080/server/get/param?param=111222333444
  @RequestMapping(value = "/server/get/param", method = RequestMethod.GET)
  public String getParam(@RequestParam(value = "param") String param) {
    return "/server/get/param," + param;
  }
 
  // 路徑中帶參GET請求: http://localhost:8080/server/get/url/AAAA/BBBB
  @RequestMapping(value = "/server/get/url/{one}/{two}", method = RequestMethod.GET)
  public String getUrl(@PathVariable("one") String one, @PathVariable("two") String two) {
    return "/get/url/{one}/{two}," + one + "," + two;
  }
 
  // 無參GET請求, 返回List: http://localhost:8080/server/get/list
  @RequestMapping(value = "/server/get/list", method = RequestMethod.GET)
  public List<Object> getList() {
    List<Object> list = new ArrayList<Object>();
    list.add(11);
    list.add("AA");
    return list;
  }
 
  // 無參GET請求, 返回對象: http://localhost:8080/server/get/MsgVO
  @RequestMapping(value = "/server/get/MsgVO", method = RequestMethod.GET)
  public MsgVO getMsgVO() {
    MsgVO vo = new MsgVO();
    vo.setMsgKey("keyAAA");
    vo.setMsgValue("valueBBB");
    return vo;
  }
 
  // POST請求, 表單參數(shù), application/x-www-form-urlencoded
  @RequestMapping(value = "/server/post/form", method = RequestMethod.POST, 
    consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  public MsgVO postForm(MsgVO msgVO) {
    System.out.println("msgKey: " + msgVO.getMsgKey() + ", msgValue: " + msgVO.getMsgValue());
    return msgVO;
  }
 
  // POST請求, JSON參數(shù), application/json
  @RequestMapping(value = "/server/post/json", method = RequestMethod.POST, 
      consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
      produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  public MsgVO postJson(@RequestBody MsgVO msgVO) {
    System.out.println("msgKey: " + msgVO.getMsgKey() + ", msgValue: " + msgVO.getMsgValue());
    return msgVO;
  }
}

第五步:創(chuàng)建一個測試服務(wù)端接口的API

import的類和注入的RestTemplate:

package com.oysept.controller; 
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
 
import com.oysept.vo.MsgVO;
 
/**
 * 客戶端, 調(diào)用服務(wù)端提供的接口
 * @author ouyangjun
 */
@RestController
public class ClientController {
 
  // 使用默認(rèn)請求方式
  @Autowired
  @Qualifier(value = "restTemplate")
  private RestTemplate restTemplate;
 
  // 在此處添加客戶端測試代碼
}

1、GET請求

// 直接在瀏覽中輸入訪問地址: http://localhost:8080/client/get
@RequestMapping(value = "/client/get", method = RequestMethod.GET)
public String get() {
  // 無參GET請求
  String get = restTemplate.getForObject("http://localhost:8080/server/get", String.class);
  System.out.println("==>/server/get return: " + get);
 
  // 帶參GET請求
  String getParam = restTemplate.getForObject("http://localhost:8080/server/get/param?param=111222333444", String.class);
  System.out.println("==>/server/get/param return: " + getParam);
 
  // 帶參GET url請求
  String getUrlParam = restTemplate.getForObject("http://localhost:8080/server/get/url/{one}/{two}", String.class, "AAAA", "BBBB");
  System.out.println("==>/server/get/url/{one}/{two} return: " + getUrlParam);
 
  // 帶參GET url請求
  Map<String, String> vars = new HashMap<String, String>();
  vars.put("one", "HHHH");
  vars.put("two", "EEEE");
  String getUrlVars = restTemplate.getForObject("http://localhost:8080/server/get/url/{one}/{two}", String.class, vars);
  System.out.println("==>/server/get/url/{one}/{two} return: " + getUrlVars);
 
  // 無參GET請求, 返回List
  @SuppressWarnings("unchecked")
  List<String> getList = restTemplate.getForObject("http://localhost:8080/server/get/list", List.class);
  System.out.println("==>/server/get/list return: " + getList);
 
  // GET請求, 返回對象
  ResponseEntity<MsgVO> entity = restTemplate.getForEntity("http://localhost:8080/server/get/MsgVO", MsgVO.class);
  System.out.println("==>/server/get/list return: " + entity.getBody());
  return "GET SUCCESS";
}

2、GET url中傳參請求

// 直接在瀏覽中輸入訪問地址: http://localhost:8080/client/get/request
// GET請求, url參數(shù), 在表頭中添加參數(shù)
@RequestMapping(value = "/client/get/request", method = RequestMethod.GET)
public String getRequest() {
  // url中參數(shù)
  Map<String, String> vars = new HashMap<String, String>();
  vars.put("one", "HHHH");
  vars.put("two", "EEEE");
 
  // 請求地址
  String uriTemplate = "http://localhost:8080/server/get/url/{one}/{two}";
  // 給URL地址encode轉(zhuǎn)碼
  URI uri = UriComponentsBuilder.fromUriString(uriTemplate).buildAndExpand(vars).toUri();
  // GET請求參數(shù)
  RequestEntity<Void> requestEntity = 
        RequestEntity.get(uri)
        .header("MyHeader", "aaabbbcccddd")
        .build();
  // 響應(yīng)
  ResponseEntity<String> response = restTemplate.exchange(requestEntity, String.class);
  // 結(jié)果
  System.out.println("==>/get/request header: " + response.getHeaders().getFirst("MyHeader"));
  System.out.println("==>/get/request body: " + response.getBody());
  return "POST SUCCESS";
}

3、POST application/x-www-form-urlencoded表單傳參請求

// 直接在瀏覽中輸入訪問地址: http://localhost:8080/client/postForm
// POST請求, form表單入?yún)?
@RequestMapping(value = "/client/postForm", method = RequestMethod.GET)
public String postForm() {
  // uri
  String uriTemplate = "http://localhost:8080/server/post/form";
 
  // 設(shè)置請求頭為form形式: application/x-www-form-urlencoded
  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
 
  // 設(shè)置參數(shù), 和MsgVO中變量名對應(yīng)
  MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
  map.add("msgKey", "1234");
  map.add("msgValue", "TestTest");
 
  // 封裝請求參數(shù)
  HttpEntity<MultiValueMap<String, String>> requestb = new HttpEntity<MultiValueMap<String, String>>(map,
  headers);
  ResponseEntity<String> response = restTemplate.postForEntity(uriTemplate, requestb, String.class);
  System.out.println("==>/server/post/form return: " + response.getBody());
  return "POST SUCCESS";
}

4、POST application/json JSON傳參請求

// 直接在瀏覽中輸入訪問地址: http://localhost:8080/client/postJson
// POST請求, JSON入?yún)?
@RequestMapping(value = "/client/postJson", method = RequestMethod.GET)
public String postJson() {
  // json入?yún)?
  MsgVO vo = new MsgVO();
  vo.setMsgKey("TTT");
  vo.setMsgValue("KKK");
 
  String uriTemplate = "http://localhost:8080/server/post/json";
  URI uri = UriComponentsBuilder.fromUriString(uriTemplate).buildAndExpand().toUri();
 
  RequestEntity<MsgVO> requestEntity = 
      RequestEntity.post(uri)
      .header("Content-Type", "application/json; charset=UTF-8")
      .body(vo);
  
  ResponseEntity<MsgVO> response = restTemplate.exchange(requestEntity, MsgVO.class);
  System.out.println("==>/server/post/json return: " + response.getBody());
  return "POST SUCCESS";
}

項目結(jié)構(gòu)圖:

以上這篇SpringBoot RestTemplate GET POST請求的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳細介紹高性能Java緩存庫Caffeine

    詳細介紹高性能Java緩存庫Caffeine

    本篇文章主要介紹了詳細介紹高性能Java緩存庫Caffeine,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java 查找list中重復(fù)數(shù)據(jù)實例詳解

    java 查找list中重復(fù)數(shù)據(jù)實例詳解

    這篇文章主要介紹了java 查找list中重復(fù)數(shù)據(jù)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • java 獲取路徑的各種方法(總結(jié))

    java 獲取路徑的各種方法(總結(jié))

    下面小編就為大家?guī)硪黄猨ava 獲取路徑的各種方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • IDEA導(dǎo)入geoserver項目的詳細步驟及注意事項

    IDEA導(dǎo)入geoserver項目的詳細步驟及注意事項

    由于GeoServer是基于Java開發(fā)的。因此在安裝之前,必須確保安裝了Java。本文給大家分享IDEA導(dǎo)入geoserver項目的詳細步驟及注意事項,感興趣的朋友一起看看吧
    2021-06-06
  • Java過濾XSS腳本攻擊詳細代碼示例

    Java過濾XSS腳本攻擊詳細代碼示例

    這篇文章主要介紹了Java過濾XSS腳本攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Eclipse Web項目打成war包的方法圖解

    Eclipse Web項目打成war包的方法圖解

    當(dāng)Tomcat啟動后該壓縮文件自動解壓縮,war包方便了web工程的發(fā)布,那么Eclipse中如何將Web項目打成war包呢?下面小編通過圖文并茂的方式給大家講解下Eclipse Web項目打成war包的方法,一起看看吧
    2016-08-08
  • Java超詳細介紹抽象類與接口的使用

    Java超詳細介紹抽象類與接口的使用

    在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-05-05
  • springboot 加載 META-INF/spring.factories方式

    springboot 加載 META-INF/spring.factories方式

    這篇文章主要介紹了springboot 加載 META-INF/spring.factories方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java返回可變引用對象問題整理

    Java返回可變引用對象問題整理

    在本篇文章里小編給大家分享的是關(guān)于Java返回可變引用對象問題整理內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-04-04
  • Java String 和 new String()的比較與區(qū)別

    Java String 和 new String()的比較與區(qū)別

    這篇文章主要介紹了Java String 和 new String()的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論