Spring Boot 教程:Rest 模板

【注】本文译自:https://www.tutorialspoint.com/spring_boot/spring_boot_rest_template.htm

Rest 模板用于创建消费 RESTful Web 服务的应用。你可以使用 exchange() 方法来消费所有 HTTP 方法的 web 服务。下面的代码展示了如何创建 Rest 模板 Bean 来自动绑定 Rest 模板对象:

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.Bean;

import org.springframework.web.client.RestTemplate;

@SpringBootApplication

public class DemoApplication {

   public static void main(String[] args) {

      SpringApplication.run(DemoApplication.class, args);

   }

   @Bean

   public RestTemplate getRestTemplate() {

      return new RestTemplate();

   }

GET

使用 RestTemplate - exchange() 方法消费 GET API

假设这个 URL http://localhost:8080/products 返回下面的 JSON ,我们要通过后面的代码使用 Rest 模板来消费这个 API 响应:

[

   {

      "id": "1",

      "name": "Honey"

   },

   {

      "id": "2",

      "name": "Almond"

   }

]

你要通过以下几点来消费 API:

自动绑定 Rest 模板对象

使用 HttpHeaders 设置请求头

使用 HttpEntity 包装请求对象

为 Exchange() 方法提供 URL、HttpMethod 和返回值类型

@RestController

public class ConsumeWebService {

   @Autowired

   RestTemplate restTemplate;

   @RequestMapping(value = "/template/products")

   public String getProductList() {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity  entity = new HttpEntity(headers);


      return restTemplate.exchange("

         http://localhost:8080/products", HttpMethod.GET, entity, String.class).getBody();

   }

}

POST

使用 RestTemplate - exchange() 方法消费 POST API

假设 URL http://localhost:8080/products 返回如下响应,我们要使用 Rest 模板来消费这个 API 响应。

请求体代码如下:

{

    "id":"3",

    "name":"Ginger"

}

响应体代码如下:

Product is created successfully

你要通过以下几点来消费 API:

自动绑定 Rest 模板对象

使用 HttpHeaders 设置请求头

使用 HttpEntity 包装请求对象,这里我们包装了产品对象发送给请求体

为 Exchange() 方法提供 URL、HttpMethod 和返回值类型

@RestController

public class ConsumeWebService {

   @Autowired

   RestTemplate restTemplate;

   @RequestMapping(value = "/template/products", method = RequestMethod.POST)

   public String createProducts(@RequestBody Product product) {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(product,headers);


      return restTemplate.exchange(

         "http://localhost:8080/products", HttpMethod.POST, entity, String.class).getBody();

   }

}

PUT

使用 RestTemplate - exchange() 方法消费 PUT API

假设 URL http://localhost:8080/products/3 返回下面的响应,我们要使用 Rest 模板来消费这个 API 响应。

请求体代码如下:

{

    "name": "Indian Ginger"

}

响应体代码如下:

Product is updated successfully

你要通过以下几点来消费 API:

自动绑定 Rest 模板对象

使用 HttpHeaders 设置请求头

使用 HttpEntity 包装请求对象,这里我们包装了产品对象发送给请求体

为 Exchange() 方法提供 URL、HttpMethod 和返回值类型

@RestController

public class ConsumeWebService {

   @Autowired

   RestTemplate restTemplate;

   @RequestMapping(value = "/template/products/{id}", method = RequestMethod.PUT)

   public String updateProduct(@PathVariable("id") String id, @RequestBody Product product) {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(product,headers);


      return restTemplate.exchange(

         "http://localhost:8080/products/"+id, HttpMethod.PUT, entity, String.class).getBody();

   }

}

DELETE

使用 RestTemplate - exchange() 方法消费 DELETE API

假设 URL http://localhost:8080/products/3 返回下面的响应,我们要使用 Rest 模板来消费这个 API 响应。

响应体代码如下:

Product is deleted successfully

你要通过以下几点来消费 API:

自动绑定 Rest 模板对象

使用 HttpHeaders 设置请求头

使用 HttpEntity 包装请求对象

为 Exchange() 方法提供 URL、HttpMethod 和返回值类型

@RestController

public class ConsumeWebService {

   @Autowired

   RestTemplate restTemplate;

   @RequestMapping(value = "/template/products/{id}", method = RequestMethod.DELETE)

   public String deleteProduct(@PathVariable("id") String id) {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(headers);


      return restTemplate.exchange(

         "http://localhost:8080/products/"+id, HttpMethod.DELETE, entity, String.class).getBody();

   }

}

完整的 Rest 模板控制器类代码文件如下:

package com.tutorialspoint.demo.controller;

import java.util.Arrays;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpEntity;

import org.springframework.http.HttpHeaders;

import org.springframework.http.HttpMethod;

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.RestController;

import org.springframework.web.client.RestTemplate;

import com.tutorialspoint.demo.model.Product;

@RestController

public class ConsumeWebService {

   @Autowired

   RestTemplate restTemplate;

   @RequestMapping(value = "/template/products")

   public String getProductList() {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(headers);


      return restTemplate.exchange(

         "http://localhost:8080/products", HttpMethod.GET, entity, String.class).getBody();

   }

   @RequestMapping(value = "/template/products", method = RequestMethod.POST)

   public String createProducts(@RequestBody Product product) {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(product,headers);


      return restTemplate.exchange(

         "http://localhost:8080/products", HttpMethod.POST, entity, String.class).getBody();

   }

   @RequestMapping(value = "/template/products/{id}", method = RequestMethod.PUT)

   public String updateProduct(@PathVariable("id") String id, @RequestBody Product product) {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(product,headers);


      return restTemplate.exchange(

         "http://localhost:8080/products/"+id, HttpMethod.PUT, entity, String.class).getBody();

   }

   @RequestMapping(value = "/template/products/{id}", method = RequestMethod.DELETE)

   public String deleteProduct(@PathVariable("id") String id) {

      HttpHeaders headers = new HttpHeaders();

      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

      HttpEntity entity = new HttpEntity(headers);


      return restTemplate.exchange(

         "http://localhost:8080/products/"+id, HttpMethod.DELETE, entity, String.class).getBody();

   }

}

Spring Boot 应用类 – DemoApplication.java 如下所示:

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class DemoApplication {

   public static void main(String[] args) {

      SpringApplication.run(DemoApplication.class, args);

   }

}

Maven build – pom.xml 如下:

   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">


   4.0.0

   com.tutorialspoint

   demo

   0.0.1-SNAPSHOT

   jar

   demo

   Demo project for Spring Boot

   

      org.springframework.boot

      spring-boot-starter-parent

      1.5.8.RELEASE

       

   

   

      UTF-8

      UTF-8

      1.8

   

   

      

         org.springframework.boot

         spring-boot-starter-web

      

      

         org.springframework.boot

         spring-boot-starter-test

         test

      

   

   

      

         

            org.springframework.boot

            spring-boot-maven-plugin

         

      

   

Gradle Build – build.gradle 如下:

buildscript {

    ext {

       springBootVersion = '1.5.8.RELEASE'

    }

    repositories {

       mavenCentral()

    }

    dependencies {

       classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

    }

 }


 apply plugin: 'java'

 apply plugin: 'eclipse'

 apply plugin: 'org.springframework.boot'


 group = 'com.tutorialspoint'

 version = '0.0.1-SNAPSHOT'

 sourceCompatibility = 1.8


 repositories {

    mavenCentral()

 }

 dependencies {

    compile('org.springframework.boot:spring-boot-starter-web')

    testCompile('org.springframework.boot:spring-boot-starter-test')

 }

你可以使用 Maven 或 Graven 命令 创建可执行 JAR 文件,并运行 Spring Boot 应用:

Maven 可以使用以下命令:

mvn clean install

在 “BUILD SUCCESS” 之后 ,你可以在 target 目录下找到 JAR 文件:

对于 Gradle,可以使用以下命令:

gradle clean build

在 “BUILD SUCCESSFUL” 之后,你可以在 build/libs 目录下找到 JAR 文件:

使用以下命令运行 JAR 文件:

java –jar

现在应用已经在 Tomcat 上以 8080 端口上启动了:

在 POSTMAN 应用中输入 URL 可以看到下面的输出:

使用 Rest 模板 GET 产品:http://localhost:8080/template/products

创建产品 POST:http://localhost:8080/template/products

更新产品 PUT:http://localhost:8080/template/products/3

删除产品:http://localhost:8080/template/products/3

你可能感兴趣的:(Spring Boot 教程:Rest 模板)