diff --git a/spring-rest/src/main/java/org/baeldung/resttemplate/lists/EmployeeApplication.java b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/EmployeeApplication.java new file mode 100644 index 0000000000..baaa4c4d80 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/EmployeeApplication.java @@ -0,0 +1,16 @@ +package org.baeldung.resttemplate.lists; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Sample application used to demonstrate working with Lists and RestTemplate. + */ +@SpringBootApplication +public class EmployeeApplication +{ + public static void main(String[] args) + { + SpringApplication.run(EmployeeApplication.class, args); + } +} diff --git a/spring-rest/src/main/java/org/baeldung/resttemplate/lists/client/EmployeeClient.java b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/client/EmployeeClient.java new file mode 100644 index 0000000000..729fa3ca3e --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/client/EmployeeClient.java @@ -0,0 +1,100 @@ +package org.baeldung.resttemplate.lists.client; + +import org.baeldung.resttemplate.lists.dto.Employee; +import org.baeldung.resttemplate.lists.dto.EmployeeList; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.*; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.List; + +/** + * Application that shows how to use Lists with RestTemplate. + */ +public class EmployeeClient +{ + public static void main(String[] args) + { + EmployeeClient employeeClient = new EmployeeClient(); + + System.out.println("Calling GET using ParameterizedTypeReference"); + employeeClient.getAllEmployeesUsingParameterizedTypeReference(); + + System.out.println("Calling GET using wrapper class"); + employeeClient.getAllEmployeesUsingWrapperClass(); + + System.out.println("Calling POST using normal lists"); + employeeClient.createEmployeesUsingLists(); + + System.out.println("Calling POST using wrapper class"); + employeeClient.createEmployeesUsingWrapperClass(); + } + + public EmployeeClient() + { + + } + + public List getAllEmployeesUsingParameterizedTypeReference() + { + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity> response = + restTemplate.exchange( + "http://localhost:8080/spring-rest/employees/", + HttpMethod.GET, + null, + new ParameterizedTypeReference>(){}); + + List employees = response.getBody(); + + employees.forEach(e -> System.out.println(e)); + + return employees; + } + + public List getAllEmployeesUsingWrapperClass() + { + RestTemplate restTemplate = new RestTemplate(); + + EmployeeList response = + restTemplate.getForObject( + "http://localhost:8080/spring-rest/employees/v2", + EmployeeList.class); + + List employees = response.getEmployees(); + + employees.forEach(e -> System.out.println(e)); + + return employees; + } + + public void createEmployeesUsingLists() + { + RestTemplate restTemplate = new RestTemplate(); + + List newEmployees = new ArrayList<>(); + newEmployees.add(new Employee(3, "Intern")); + newEmployees.add(new Employee(4, "CEO")); + + restTemplate.postForObject( + "http://localhost:8080/spring-rest/employees/", + newEmployees, + ResponseEntity.class); + } + + public void createEmployeesUsingWrapperClass() + { + RestTemplate restTemplate = new RestTemplate(); + + List newEmployees = new ArrayList<>(); + newEmployees.add(new Employee(3, "Intern")); + newEmployees.add(new Employee(4, "CEO")); + + restTemplate.postForObject( + "http://localhost:8080/spring-rest/employees/v2/", + new EmployeeList(newEmployees), + ResponseEntity.class); + } +} diff --git a/spring-rest/src/main/java/org/baeldung/resttemplate/lists/controller/EmployeeResource.java b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/controller/EmployeeResource.java new file mode 100644 index 0000000000..f051c6a78b --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/controller/EmployeeResource.java @@ -0,0 +1,45 @@ +package org.baeldung.resttemplate.lists.controller; + +import org.baeldung.resttemplate.lists.dto.Employee; +import org.baeldung.resttemplate.lists.dto.EmployeeList; +import org.baeldung.resttemplate.lists.service.EmployeeService; +import org.springframework.beans.factory.annotation.Autowired; +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 java.util.List; + +@RestController +@RequestMapping("/employees") +public class EmployeeResource +{ + @Autowired + private EmployeeService employeeService; + + @RequestMapping(method = RequestMethod.GET, path = "/") + public List getEmployees() + { + return employeeService.getAllEmployees(); + } + + @RequestMapping(method = RequestMethod.GET, path = "/v2") + public EmployeeList getEmployeesUsingWrapperClass() + { + List employees = employeeService.getAllEmployees(); + return new EmployeeList(employees); + } + + @RequestMapping(method = RequestMethod.POST, path = "/") + public void addEmployees(@RequestBody List employees) + { + employeeService.addEmployees(employees); + } + + @RequestMapping(method = RequestMethod.POST, path = "/v2") + public void addEmployeesUsingWrapperClass(@RequestBody EmployeeList employeeWrapper) + { + employeeService.addEmployees(employeeWrapper.getEmployees()); + } +} diff --git a/spring-rest/src/main/java/org/baeldung/resttemplate/lists/dto/Employee.java b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/dto/Employee.java new file mode 100644 index 0000000000..bd8ebbf969 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/dto/Employee.java @@ -0,0 +1,40 @@ +package org.baeldung.resttemplate.lists.dto; + +public class Employee { + + public long id; + public String title; + + public Employee() + { + + } + + public Employee(long id, String title) + { + this.id = id; + this.title = title; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String toString() + { + return "Employee #" + id + "[" + title + "]"; + } +} diff --git a/spring-rest/src/main/java/org/baeldung/resttemplate/lists/dto/EmployeeList.java b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/dto/EmployeeList.java new file mode 100644 index 0000000000..2bb86ac5b4 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/dto/EmployeeList.java @@ -0,0 +1,29 @@ +package org.baeldung.resttemplate.lists.dto; + +import java.util.ArrayList; +import java.util.List; + +public class EmployeeList +{ + public List employees; + + public EmployeeList() + { + employees = new ArrayList<>(); + } + + public EmployeeList(List employees) + { + this.employees = employees; + } + + public void setEmployees(List employees) + { + this.employees = employees; + } + + public List getEmployees() + { + return employees; + } +} diff --git a/spring-rest/src/main/java/org/baeldung/resttemplate/lists/service/EmployeeService.java b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/service/EmployeeService.java new file mode 100644 index 0000000000..08196dda77 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/resttemplate/lists/service/EmployeeService.java @@ -0,0 +1,24 @@ +package org.baeldung.resttemplate.lists.service; + +import org.baeldung.resttemplate.lists.dto.Employee; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class EmployeeService +{ + public List getAllEmployees() + { + List employees = new ArrayList<>(); + employees.add(new Employee(1, "Manager")); + employees.add(new Employee(2, "Java Developer")); + return employees; + } + + public void addEmployees(List employees) + { + employees.forEach(e -> System.out.println("Adding new employee " + e)); + } +}