diff --git a/spring-rest-template/.gitignore b/spring-rest-template/.gitignore
new file mode 100644
index 0000000000..afdfaa6ded
--- /dev/null
+++ b/spring-rest-template/.gitignore
@@ -0,0 +1,14 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+*/.idea/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/spring-rest-template/README.md b/spring-rest-template/README.md
new file mode 100644
index 0000000000..a1d803f325
--- /dev/null
+++ b/spring-rest-template/README.md
@@ -0,0 +1,26 @@
+## Spring REST Templat Example Project
+
+### The Course
+The "REST With Spring" Classes: http://bit.ly/restwithspring
+
+### Relevant Articles:
+- [Spring @RequestMapping](http://www.baeldung.com/spring-requestmapping)
+- [Http Message Converters with the Spring Framework](http://www.baeldung.com/spring-httpmessageconverter-rest)
+- [Redirect in Spring](http://www.baeldung.com/spring-redirect-and-forward)
+- [Returning Custom Status Codes from Spring Controllers](http://www.baeldung.com/spring-mvc-controller-custom-http-status-code)
+- [A Guide to OkHttp](http://www.baeldung.com/guide-to-okhttp)
+- [Binary Data Formats in a Spring REST API](http://www.baeldung.com/spring-rest-api-with-binary-data-formats)
+- [Guide to UriComponentsBuilder in Spring](http://www.baeldung.com/spring-uricomponentsbuilder)
+- [Introduction to FindBugs](http://www.baeldung.com/intro-to-findbugs)
+- [A Custom Media Type for a Spring REST API](http://www.baeldung.com/spring-rest-custom-media-type)
+- [HTTP PUT vs HTTP PATCH in a REST API](http://www.baeldung.com/http-put-patch-difference-spring)
+- [Exploring the Spring Boot TestRestTemplate](http://www.baeldung.com/spring-boot-testresttemplate)
+- [Spring – Log Incoming Requests](http://www.baeldung.com/spring-http-logging)
+- [RequestBody and ResponseBody Annotations](http://www.baeldung.com/requestbody-and-responsebody-annotations)
+- [Introduction to CheckStyle](http://www.baeldung.com/checkstyle-java)
+- [How to Change the Default Port in Spring Boot](http://www.baeldung.com/spring-boot-change-port)
+- [Guide to DeferredResult in Spring](http://www.baeldung.com/spring-deferred-result)
+- [Spring Custom Property Editor](http://www.baeldung.com/spring-mvc-custom-property-editor)
+- [Using the Spring RestTemplate Interceptor](http://www.baeldung.com/spring-rest-template-interceptor)
+- [Configure a RestTemplate with RestTemplateBuilder](http://www.baeldung.com/spring-rest-template-builder)
+
diff --git a/spring-rest-template/checkstyle.xml b/spring-rest-template/checkstyle.xml
new file mode 100644
index 0000000000..85063a7570
--- /dev/null
+++ b/spring-rest-template/checkstyle.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-rest-template/pom.xml b/spring-rest-template/pom.xml
new file mode 100644
index 0000000000..fa93308cf5
--- /dev/null
+++ b/spring-rest-template/pom.xml
@@ -0,0 +1,83 @@
+
+ 4.0.0
+ com.baeldung
+ spring-rest-template
+ 0.1-SNAPSHOT
+ spring-rest-template
+ jar
+
+
+ parent-boot-2
+ com.baeldung
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+
+
+
+
+ org.springframework
+ spring-web
+
+
+ commons-logging
+ commons-logging
+
+
+
+
+
+
+ spring-rest-template
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${checkstyle-maven-plugin.version}
+
+ checkstyle.xml
+
+
+
+
+ check
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 3
+ true
+
+ **/*IntegrationTest.java
+ **/*LongRunningUnitTest.java
+ **/*ManualTest.java
+ **/*LiveTest.java
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${checkstyle-maven-plugin.version}
+
+ checkstyle.xml
+
+
+
+
+
+
+
+ 3.0.0
+
+
diff --git a/spring-rest-template/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java b/spring-rest-template/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java
new file mode 100644
index 0000000000..547aec17a0
--- /dev/null
+++ b/spring-rest-template/src/main/java/com/baeldung/web/upload/client/MultipartFileUploadClient.java
@@ -0,0 +1,61 @@
+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 body = new LinkedMultiValueMap<>();
+ body.add("file", getTestFile());
+
+
+ HttpEntity> requestEntity = new HttpEntity<>(body, headers);
+ String serverUrl = "http://localhost:8082/spring-rest/fileserver/singlefileupload/";
+ RestTemplate restTemplate = new RestTemplate();
+ ResponseEntity 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 body = new LinkedMultiValueMap<>();
+ body.add("files", getTestFile());
+ body.add("files", getTestFile());
+ body.add("files", getTestFile());
+
+ HttpEntity> requestEntity = new HttpEntity<>(body, headers);
+ String serverUrl = "http://localhost:8082/spring-rest/fileserver/multiplefileupload/";
+ RestTemplate restTemplate = new RestTemplate();
+ ResponseEntity 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());
+ }
+}