Spring RestTemplate Introduction


Spring RestTemplate Introduction

  1. If we want to call remote REST service from our spring application, we need to use RestTemplate.
  2. Before we use RestTemplate we need to customize it by setting response type and other parameters.
  3. RestTemplat is not auto-configured object from spring, we need to create explicitly.
  4. Spring gave the auto-configured object of RestTemplateBuilder, by using this we can create RestTemplate object.
@Autowired
private RestTemplateBuilder restTemplateBuilder;

private final RestTemplate restTemplate = restTemplateBuilder.build();
  1. Also, we need to set some basic properties to RestTemplate like response type.
this.restTemplate = restTemplateBuilder.build();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
messageConverters.add(converter);
this.restTemplate.setMessageConverters(messageConverters);

The basic code for RestTemplate

Controller

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.service.EmployeeService;

@Controller
public class MyController {

	@Autowired
	private EmployeeService employeeService;

	@GetMapping("/getEmployees")
	@ResponseBody
	public Object getEmployees() {
		return employeeService.getEmployees();
	}
}

Service

package com.example.demo.service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class EmployeeService {

	private final RestTemplate restTemplate;

	public EmployeeService(RestTemplateBuilder restTemplateBuilder) {
		this.restTemplate = restTemplateBuilder.build();
		List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
		MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
		converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
		messageConverters.add(converter);
		this.restTemplate.setMessageConverters(messageConverters);
	}

	public Object getEmployees() {
		return this.restTemplate.getForObject("http://dummy.restapiexample.com/api/v1/employees", List.class);
	}
}

Spring boot App

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RestTemplateExampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(RestTemplateExampleApplication.class, args);
	}

}

Gradle file

plugins {
	id 'org.springframework.boot' version '2.1.6.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}