JAVA-4010: Moved 3 articles from this module
This commit is contained in:
parent
e54423ce83
commit
2931dcbeb4
@ -11,10 +11,7 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
|
||||
- [Spring RestTemplate Error Handling](https://www.baeldung.com/spring-rest-template-error-handling)
|
||||
- [Configure a RestTemplate with RestTemplateBuilder](https://www.baeldung.com/spring-rest-template-builder)
|
||||
- [Mocking a RestTemplate in Spring](https://www.baeldung.com/spring-mock-rest-template)
|
||||
- [Download a Large File Through a Spring RestTemplate](https://www.baeldung.com/spring-resttemplate-download-large-file)
|
||||
- [Using the Spring RestTemplate Interceptor](https://www.baeldung.com/spring-rest-template-interceptor)
|
||||
- [Uploading MultipartFile with Spring RestTemplate](https://www.baeldung.com/spring-rest-template-multipart-upload)
|
||||
- [Get and Post Lists of Objects with RestTemplate](https://www.baeldung.com/spring-rest-template-list)
|
||||
- [HTTP PUT vs HTTP PATCH in a REST API](https://www.baeldung.com/http-put-patch-difference-spring)
|
||||
|
||||
### NOTE:
|
||||
|
@ -1,16 +0,0 @@
|
||||
package com.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);
|
||||
}
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
package com.baeldung.resttemplate.lists.client;
|
||||
|
||||
import com.baeldung.resttemplate.lists.dto.Employee;
|
||||
import com.baeldung.resttemplate.lists.dto.EmployeeList;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
/**
|
||||
* 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 for entity using arrays");
|
||||
employeeClient.getForEntityEmployeesAsArray();
|
||||
|
||||
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 Employee[] getForEntityEmployeesAsArray() {
|
||||
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
ResponseEntity<Employee[]> response =
|
||||
restTemplate.getForEntity(
|
||||
"http://localhost:8082/spring-rest/employees/",
|
||||
Employee[].class);
|
||||
|
||||
Employee[] employees = response.getBody();
|
||||
|
||||
assert employees != null;
|
||||
asList(employees).forEach(System.out::println);
|
||||
|
||||
return employees;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public List<Employee> getAllEmployeesUsingParameterizedTypeReference() {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
ResponseEntity<List<Employee>> response =
|
||||
restTemplate.exchange(
|
||||
"http://localhost:8082/spring-rest/employees/",
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<List<Employee>>() {
|
||||
});
|
||||
|
||||
List<Employee> employees = response.getBody();
|
||||
|
||||
assert employees != null;
|
||||
employees.forEach(System.out::println);
|
||||
|
||||
return employees;
|
||||
}
|
||||
|
||||
public List<Employee> getAllEmployeesUsingWrapperClass() {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
EmployeeList response =
|
||||
restTemplate.getForObject(
|
||||
"http://localhost:8082/spring-rest/employees/v2",
|
||||
EmployeeList.class);
|
||||
|
||||
List<Employee> employees = response.getEmployees();
|
||||
|
||||
employees.forEach(System.out::println);
|
||||
|
||||
return employees;
|
||||
}
|
||||
|
||||
public void createEmployeesUsingLists() {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
List<Employee> newEmployees = new ArrayList<>();
|
||||
newEmployees.add(new Employee(3, "Intern"));
|
||||
newEmployees.add(new Employee(4, "CEO"));
|
||||
|
||||
restTemplate.postForObject(
|
||||
"http://localhost:8082/spring-rest/employees/",
|
||||
newEmployees,
|
||||
ResponseEntity.class);
|
||||
}
|
||||
|
||||
public void createEmployeesUsingWrapperClass() {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
List<Employee> newEmployees = new ArrayList<>();
|
||||
newEmployees.add(new Employee(3, "Intern"));
|
||||
newEmployees.add(new Employee(4, "CEO"));
|
||||
|
||||
restTemplate.postForObject(
|
||||
"http://localhost:8082/spring-rest/employees/v2/",
|
||||
new EmployeeList(newEmployees),
|
||||
ResponseEntity.class);
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
package com.baeldung.resttemplate.lists.controller;
|
||||
|
||||
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 com.baeldung.resttemplate.lists.dto.Employee;
|
||||
import com.baeldung.resttemplate.lists.dto.EmployeeList;
|
||||
import com.baeldung.resttemplate.lists.service.EmployeeService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/employees")
|
||||
public class EmployeeResource
|
||||
{
|
||||
@Autowired
|
||||
private EmployeeService employeeService;
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, path = "/")
|
||||
public List<Employee> getEmployees()
|
||||
{
|
||||
return employeeService.getAllEmployees();
|
||||
}
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, path = "/v2")
|
||||
public EmployeeList getEmployeesUsingWrapperClass()
|
||||
{
|
||||
List<Employee> employees = employeeService.getAllEmployees();
|
||||
return new EmployeeList(employees);
|
||||
}
|
||||
|
||||
@RequestMapping(method = RequestMethod.POST, path = "/")
|
||||
public void addEmployees(@RequestBody List<Employee> employees)
|
||||
{
|
||||
employeeService.addEmployees(employees);
|
||||
}
|
||||
|
||||
@RequestMapping(method = RequestMethod.POST, path = "/v2")
|
||||
public void addEmployeesUsingWrapperClass(@RequestBody EmployeeList employeeWrapper)
|
||||
{
|
||||
employeeService.addEmployees(employeeWrapper.getEmployees());
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package com.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 + "]";
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package com.baeldung.resttemplate.lists.dto;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class EmployeeList
|
||||
{
|
||||
public List<Employee> employees;
|
||||
|
||||
public EmployeeList()
|
||||
{
|
||||
employees = new ArrayList<>();
|
||||
}
|
||||
|
||||
public EmployeeList(List<Employee> employees)
|
||||
{
|
||||
this.employees = employees;
|
||||
}
|
||||
|
||||
public void setEmployees(List<Employee> employees)
|
||||
{
|
||||
this.employees = employees;
|
||||
}
|
||||
|
||||
public List<Employee> getEmployees()
|
||||
{
|
||||
return employees;
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
package com.baeldung.resttemplate.lists.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baeldung.resttemplate.lists.dto.Employee;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service("EmployeeListService")
|
||||
public class EmployeeService
|
||||
{
|
||||
public List<Employee> getAllEmployees()
|
||||
{
|
||||
List<Employee> employees = new ArrayList<>();
|
||||
employees.add(new Employee(1, "Manager"));
|
||||
employees.add(new Employee(2, "Java Developer"));
|
||||
return employees;
|
||||
}
|
||||
|
||||
public void addEmployees(List<Employee> employees)
|
||||
{
|
||||
employees.forEach(e -> System.out.println("Adding new employee " + e));
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package com.baeldung.web.upload.app;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@ComponentScan("com.baeldung.web.upload")
|
||||
@SpringBootApplication
|
||||
public class UploadApplication extends SpringBootServletInitializer {
|
||||
|
||||
public static void main(final String[] args) {
|
||||
SpringApplication.run(UploadApplication.class, args);
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
package com.baeldung.web.upload.client;
|
||||
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MultipartFileUploadClient {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
uploadSingleFile();
|
||||
uploadMultipleFile();
|
||||
}
|
||||
|
||||
private static void uploadSingleFile() throws IOException {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("file", getTestFile());
|
||||
|
||||
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
|
||||
String serverUrl = "http://localhost:8082/spring-rest/fileserver/singlefileupload/";
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(serverUrl, requestEntity, String.class);
|
||||
System.out.println("Response code: " + response.getStatusCode());
|
||||
}
|
||||
|
||||
private static void uploadMultipleFile() throws IOException {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
|
||||
String serverUrl = "http://localhost:8082/spring-rest/fileserver/multiplefileupload/";
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(serverUrl, requestEntity, String.class);
|
||||
System.out.println("Response code: " + response.getStatusCode());
|
||||
}
|
||||
|
||||
public static Resource getTestFile() throws IOException {
|
||||
Path testFile = Files.createTempFile("test-file", ".txt");
|
||||
System.out.println("Creating and Uploading Test File: " + testFile);
|
||||
Files.write(testFile, "Hello World !!, This is a test file.".getBytes());
|
||||
return new FileSystemResource(testFile.toFile());
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package com.baeldung.web.upload.controller;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/fileserver")
|
||||
public class FileServerResource {
|
||||
|
||||
@RequestMapping(path = "/singlefileupload/", method = RequestMethod.POST)
|
||||
public ResponseEntity<String> processFile(@RequestParam("file") MultipartFile file) throws IOException {
|
||||
|
||||
byte[] bytes = file.getBytes();
|
||||
|
||||
System.out.println("File Name: " + file.getOriginalFilename());
|
||||
System.out.println("File Content Type: " + file.getContentType());
|
||||
System.out.println("File Content:\n" + new String(bytes));
|
||||
|
||||
return (new ResponseEntity<>("Successful", null, HttpStatus.OK));
|
||||
}
|
||||
|
||||
@RequestMapping(path = "/multiplefileupload/", method = RequestMethod.POST)
|
||||
public ResponseEntity<String> processFile(@RequestParam("files") List<MultipartFile> files) throws IOException {
|
||||
|
||||
for (MultipartFile file : files) {
|
||||
byte[] bytes = file.getBytes();
|
||||
|
||||
System.out.println("File Name: " + file.getOriginalFilename());
|
||||
System.out.println("File Content Type: " + file.getContentType());
|
||||
System.out.println("File Content:\n" + new String(bytes));
|
||||
}
|
||||
|
||||
return (new ResponseEntity<>("Successful", null, HttpStatus.OK));
|
||||
}
|
||||
}
|
@ -8,12 +8,10 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
import com.baeldung.responseheaders.ResponseHeadersApplication;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = { ResponseHeadersApplication.class,
|
||||
com.baeldung.web.upload.app.UploadApplication.class,
|
||||
})
|
||||
@SpringBootTest(classes = { ResponseHeadersApplication.class })
|
||||
public class SpringContextTest {
|
||||
|
||||
@Test
|
||||
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
|
||||
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
|
||||
}
|
||||
}
|
||||
|
@ -1,109 +0,0 @@
|
||||
package com.baeldung.resttemplate;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.util.StreamUtils;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class LargeFileDownloadIntegrationTest {
|
||||
|
||||
static String FILE_URL = "http://ovh.net/files/1Mio.dat";
|
||||
|
||||
RestTemplate restTemplate;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
restTemplate = new RestTemplate();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenResumableUrl_whenUrlCalledByHeadOption_thenExpectHeadersAvailable() {
|
||||
HttpHeaders headers = restTemplate.headForHeaders(FILE_URL);
|
||||
Assertions
|
||||
.assertThat(headers.get("Accept-Ranges"))
|
||||
.contains("bytes");
|
||||
Assertions
|
||||
.assertThat(headers.getContentLength())
|
||||
.isGreaterThan(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenResumableUrl_whenDownloadCompletely_thenExpectCorrectFileSize() {
|
||||
HttpHeaders headers = restTemplate.headForHeaders(FILE_URL);
|
||||
long contentLength = headers.getContentLength();
|
||||
File file = restTemplate.execute(FILE_URL, HttpMethod.GET, null, clientHttpResponse -> {
|
||||
File ret = File.createTempFile("download", "tmp");
|
||||
StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(ret));
|
||||
return ret;
|
||||
});
|
||||
|
||||
Assert.assertNotNull(file);
|
||||
Assertions
|
||||
.assertThat(file.length())
|
||||
.isEqualTo(contentLength);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenResumableUrl_whenDownloadRange_thenExpectFileSizeEqualOrLessThanRange() {
|
||||
int range = 10;
|
||||
File file = restTemplate.execute(FILE_URL, HttpMethod.GET, clientHttpRequest -> clientHttpRequest
|
||||
.getHeaders()
|
||||
.set("Range", String.format("bytes=0-%d", range - 1)), clientHttpResponse -> {
|
||||
File ret = File.createTempFile("download", "tmp");
|
||||
StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(ret));
|
||||
return ret;
|
||||
});
|
||||
|
||||
Assert.assertNotNull(file);
|
||||
Assertions
|
||||
.assertThat(file.length())
|
||||
.isLessThanOrEqualTo(range);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenResumableUrl_whenPauseDownloadAndResume_thenExpectCorrectFileSize() {
|
||||
|
||||
int range = 10;
|
||||
|
||||
HttpHeaders headers = restTemplate.headForHeaders(FILE_URL);
|
||||
long contentLength = headers.getContentLength();
|
||||
|
||||
File file = restTemplate.execute(FILE_URL, HttpMethod.GET, clientHttpRequest -> clientHttpRequest
|
||||
.getHeaders()
|
||||
.set("Range", String.format("bytes=0-%d", range - 1)), clientHttpResponse -> {
|
||||
File ret = File.createTempFile("download", "tmp");
|
||||
StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(ret));
|
||||
return ret;
|
||||
});
|
||||
|
||||
Assert.assertNotNull(file);
|
||||
|
||||
Assertions
|
||||
.assertThat(file.length())
|
||||
.isLessThanOrEqualTo(range);
|
||||
|
||||
restTemplate.execute(FILE_URL, HttpMethod.GET, clientHttpRequest -> clientHttpRequest
|
||||
.getHeaders()
|
||||
.set("Range", String.format("bytes=%d-%d", file.length(), contentLength)), clientHttpResponse -> {
|
||||
StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(file, true));
|
||||
return file;
|
||||
});
|
||||
|
||||
Assertions
|
||||
.assertThat(file.length())
|
||||
.isEqualTo(contentLength);
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user