Spring RestTemplate CRUD operations


RestTemplate

  • Spring RestTemplate is available on Spring-web module.
  • RestTemplat supports all HTTP, HTTPS protocols
  • RestTemplate supports HTTP all methods like GET, POST, DELETE, PUT ...etc.

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 org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

import com.example.demo.service.EmployeeService;

@Controller
public class MyController {

	@Autowired
	private EmployeeService employeeService;

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

	@GetMapping("/createEmployee")
	@ResponseBody
	public Object createEmployee(@RequestBody Object employee) {
		return employeeService.createEmployee(employee);
	}

	@GetMapping("/getEmployee/{employeeId}")
	@ResponseBody
	public Object getEmployee(@PathVariable("employeeId") int employeeId) {
		return employeeService.getEmployee(employeeId);
	}

	@GetMapping("/deleteEmployee/{employeeId}")
	@ResponseBody
	public void deleteEmployee(@PathVariable("employeeId") int employeeId) {
		employeeService.deleteEmployee(employeeId);
	}
}

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.ResponseEntity;
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);
	}

	public Object getEmployee(int employeeId) {
		return this.restTemplate.getForObject("http://dummy.restapiexample.com/api/v1/employee/" + employeeId,
				Object.class);
	}

	public Object createEmployee(Object employee) {
		ResponseEntity<Object> response = this.restTemplate
				.postForEntity("http://dummy.restapiexample.com/api/v1/employee/", employee, Object.class);
		return response.getBody();
	}

	public void deleteEmployee(int employeeId) {
		this.restTemplate.delete("http://dummy.restapiexample.com/api/v1/employee/" + employeeId, Object.class);
	}
}

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'
}

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);
	}

}