背景

这段时间自己做的项目中需要调用服务提供者的服务(接口),具体就是:我这边需要将页面所输入的 Groovy 脚本代码传给别人提供的服务接口,然后那边返回脚本编译的结果给我,我需要将编译结果展示在页面,用的就是 RestTemplate 了,那 RestTemplate 是什么呢?简单说就是:简化了发起 HTTP 请求以及处理响应的过程,并且支持 REST 。下文就稍微总结下。

如何使用

先讲讲如何使用吧,我项目是 SpringBoot 项目,可以在启动类中加入:

@Bean
public RestTemplate restTemplate() {
  return new RestTemplate();
}
  • 1.
  • 2.
  • 3.
  • 4.

然后在 Controller 层中引入:

@Autowired
private RestTemplate restTemplate;
  • 1.
  • 2.

接下来就可以在 Controller 中各个方法中使用 restTemplate 了,但是 restTemplate 里面有什么方法呢?

RestTemplate 内部方法

RestTemplate 详解_占位符

从图中 RestTemplate 可以看到有很多方法,我们可以提取出主要的几种方法是:

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • OPTIONS
  • EXCHANGE
  • EXECUTE

图片中依然可以知道 RestTemplate 类中的方法主要是来自接口 RestOperations,下面我们具体看看这些方法里面的具体实现与该如何使用。

Get 方法

在 RestTemplate 中,发送一个 GET 请求,我们可以通过如下两种方式:

getForEntity

RestTemplate 详解_占位符_02

getForEntity 方法的返回值是一个ResponseEntity<T>ResponseEntity<T>是 Spring 对 HTTP 请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。比如下面一个例子:

@RequestMapping("/gethello")
public String getHello() {
    ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class);
    String body = responseEntity.getBody();
    HttpStatus statusCode = responseEntity.getStatusCode();
    int statusCodeValue = responseEntity.getStatusCodeValue();
    HttpHeaders headers = responseEntity.getHeaders();
    StringBu