diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml
index 43ccfd5501..0d18284662 100644
--- a/spring-cloud-modules/pom.xml
+++ b/spring-cloud-modules/pom.xml
@@ -52,6 +52,7 @@
spring-cloud-bus
spring-cloud-data-flow
spring-cloud-sleuth
+ spring-cloud-openfeign-2
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/README.md b/spring-cloud-modules/spring-cloud-openfeign-2/README.md
new file mode 100644
index 0000000000..7d843af9ea
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/README.md
@@ -0,0 +1 @@
+### Relevant Articles:
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/pom.xml b/spring-cloud-modules/spring-cloud-openfeign-2/pom.xml
new file mode 100644
index 0000000000..7f7acc5fe8
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/pom.xml
@@ -0,0 +1,64 @@
+
+
+ 4.0.0
+ com.baeldung.cloud
+ spring-cloud-openfeign-2
+ spring-cloud-openfeign-2
+ OpenFeign project for Spring Boot
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ io.github.openfeign
+ feign-okhttp
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ io.github.openfeign.form
+ feign-form
+ ${feign-form.version}
+
+
+ io.github.openfeign.form
+ feign-form-spring
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ 2021.0.0
+ 3.8.0
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/ExampleApplication.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/ExampleApplication.java
new file mode 100644
index 0000000000..c7f07f6667
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/ExampleApplication.java
@@ -0,0 +1,16 @@
+package com.baeldung.cloud.openfeign;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableFeignClients
+public class ExampleApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ExampleApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/exception/BadRequestException.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/exception/BadRequestException.java
new file mode 100644
index 0000000000..7c2daf43fe
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/exception/BadRequestException.java
@@ -0,0 +1,21 @@
+package com.baeldung.cloud.openfeign.exception;
+
+public class BadRequestException extends Exception {
+
+ public BadRequestException() {
+ }
+
+ public BadRequestException(String message) {
+ super(message);
+ }
+
+ public BadRequestException(Throwable cause) {
+ super(cause);
+ }
+
+ @Override
+ public String toString() {
+ return "BadRequestException: " + getMessage();
+ }
+
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java
new file mode 100644
index 0000000000..19f6204b86
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java
@@ -0,0 +1,18 @@
+package com.baeldung.cloud.openfeign.exception;
+
+public class NotFoundException extends Exception {
+
+ public NotFoundException(String message) {
+ super(message);
+ }
+
+ public NotFoundException(Throwable cause) {
+ super(cause);
+ }
+
+ @Override
+ public String toString() {
+ return "NotFoundException: " + getMessage();
+ }
+
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/ExceptionMessage.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/ExceptionMessage.java
new file mode 100644
index 0000000000..45a555b2ea
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/ExceptionMessage.java
@@ -0,0 +1,55 @@
+package com.baeldung.cloud.openfeign.fileupload.config;
+
+public class ExceptionMessage {
+ private String timestamp;
+ private int status;
+ private String error;
+ private String message;
+ private String path;
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getError() {
+ return error;
+ }
+
+ public void setError(String error) {
+ this.error = error;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ @Override
+ public String toString() {
+ return "ExceptionMessage [timestamp=" + timestamp + ", status=" + status + ", error=" + error + ", message=" + message + ", path=" + path + "]";
+ }
+
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/FeignSupportConfig.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/FeignSupportConfig.java
new file mode 100644
index 0000000000..802077a3d7
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/FeignSupportConfig.java
@@ -0,0 +1,28 @@
+package com.baeldung.cloud.openfeign.fileupload.config;
+
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringEncoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.client.RestTemplate;
+
+import feign.codec.Encoder;
+import feign.codec.ErrorDecoder;
+import feign.form.spring.SpringFormEncoder;
+
+public class FeignSupportConfig {
+ @Bean
+ public Encoder multipartFormEncoder() {
+ return new SpringFormEncoder(new SpringEncoder(new ObjectFactory() {
+ @Override
+ public HttpMessageConverters getObject() {
+ return new HttpMessageConverters(new RestTemplate().getMessageConverters());
+ }
+ }));
+ }
+
+ @Bean
+ public ErrorDecoder errorDecoder() {
+ return new RetreiveMessageErrorDecoder();
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/RetreiveMessageErrorDecoder.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/RetreiveMessageErrorDecoder.java
new file mode 100644
index 0000000000..5ebd7b6887
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/RetreiveMessageErrorDecoder.java
@@ -0,0 +1,34 @@
+package com.baeldung.cloud.openfeign.fileupload.config;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.baeldung.cloud.openfeign.exception.BadRequestException;
+import com.baeldung.cloud.openfeign.exception.NotFoundException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import feign.Response;
+import feign.codec.ErrorDecoder;
+
+public class RetreiveMessageErrorDecoder implements ErrorDecoder {
+ private final ErrorDecoder errorDecoder = new Default();
+ @Override
+ public Exception decode(String methodKey, Response response) {
+ ExceptionMessage message = null;
+ try (InputStream bodyIs = response.body()
+ .asInputStream()) {
+ ObjectMapper mapper = new ObjectMapper();
+ message = mapper.readValue(bodyIs, ExceptionMessage.class);
+ } catch (IOException e) {
+ return new Exception(e.getMessage());
+ }
+ switch (response.status()) {
+ case 400:
+ return new BadRequestException(message.getMessage() != null ? message.getMessage() : "Bad Request");
+ case 404:
+ return new NotFoundException(message.getMessage() != null ? message.getMessage() : "Not found");
+ default:
+ return errorDecoder.decode(methodKey, response);
+ }
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java
new file mode 100644
index 0000000000..105be15192
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java
@@ -0,0 +1,30 @@
+package com.baeldung.cloud.openfeign.fileupload.service;
+
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baeldung.cloud.openfeign.exception.BadRequestException;
+import com.baeldung.cloud.openfeign.exception.NotFoundException;
+
+@Component
+public class FileUploadClientFallbackFactory implements FallbackFactory {
+ @Override
+ public FileUploadClientWithFallbackFactory create(Throwable cause) {
+ return new FileUploadClientWithFallbackFactory() {
+ @Override
+ public String fileUpload(MultipartFile file) {
+ if (cause instanceof BadRequestException) {
+ return "Bad Request!!!";
+ }
+ if (cause instanceof NotFoundException) {
+ return "Not Found!!!";
+ }
+ if (cause instanceof Exception) {
+ return "Exception!!!";
+ }
+ return "Successfully Uploaded file!!!";
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallBack.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallBack.java
new file mode 100644
index 0000000000..e842770f2d
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallBack.java
@@ -0,0 +1,15 @@
+package com.baeldung.cloud.openfeign.fileupload.service;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baeldung.cloud.openfeign.fileupload.config.FeignSupportConfig;
+
+@FeignClient(name = "file", url = "http://localhost:8081", configuration = FeignSupportConfig.class, fallback = FileUploadClientWithFallbackImpl.class)
+public interface FileUploadClientWithFallBack {
+ @PostMapping(value = "/upload-error", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ String fileUpload(@RequestPart(value = "file") MultipartFile file);
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackFactory.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackFactory.java
new file mode 100644
index 0000000000..829cd0f535
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackFactory.java
@@ -0,0 +1,15 @@
+package com.baeldung.cloud.openfeign.fileupload.service;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baeldung.cloud.openfeign.fileupload.config.FeignSupportConfig;
+
+@FeignClient(name = "file", url = "http://localhost:8081", configuration = FeignSupportConfig.class, fallbackFactory = FileUploadClientFallbackFactory.class)
+public interface FileUploadClientWithFallbackFactory {
+ @PostMapping(value = "/upload-error", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ String fileUpload(@RequestPart(value = "file") MultipartFile file);
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackImpl.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackImpl.java
new file mode 100644
index 0000000000..b41a7f3c5d
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackImpl.java
@@ -0,0 +1,31 @@
+package com.baeldung.cloud.openfeign.fileupload.service;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baeldung.cloud.openfeign.exception.BadRequestException;
+import com.baeldung.cloud.openfeign.exception.NotFoundException;
+
+@Component
+public class FileUploadClientWithFallbackImpl implements FileUploadClientWithFallBack {
+
+ @Override
+ public String fileUpload(MultipartFile file) {
+ try {
+ throw new NotFoundException("hi, something wrong");
+ } catch (Exception ex) {
+
+ if (ex instanceof BadRequestException) {
+ return "Bad Request!!!";
+ }
+ if (ex instanceof NotFoundException) {
+ return "Not Found!!!";
+ }
+ if (ex instanceof Exception) {
+ return "Exception!!!";
+ }
+ return "Successfully Uploaded file!!!";
+ }
+ }
+
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadResource.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadResource.java
new file mode 100644
index 0000000000..2d5090897d
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadResource.java
@@ -0,0 +1,16 @@
+package com.baeldung.cloud.openfeign.fileupload.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import feign.Headers;
+import feign.Param;
+import feign.RequestLine;
+import feign.Response;
+
+public interface UploadResource {
+
+ @RequestLine("POST /upload-error")
+ @Headers("Content-Type: multipart/form-data")
+ Response uploadFile(@Param("file") MultipartFile file);
+
+}
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
new file mode 100644
index 0000000000..244a5a2168
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
@@ -0,0 +1,34 @@
+package com.baeldung.cloud.openfeign.fileupload.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import feign.Feign;
+import feign.Response;
+import feign.form.spring.SpringFormEncoder;
+
+@Service
+public class UploadService {
+ private static final String HTTP_FILE_UPLOAD_URL = "http://localhost:8081";
+
+ @Autowired
+ private FileUploadClientWithFallbackFactory fileUploadClient;
+ @Autowired
+ private FileUploadClientWithFallBack fileUploadClientWithFallback;
+
+ public boolean uploadFileWithManualClient(MultipartFile file) {
+ UploadResource fileUploadResource = Feign.builder().encoder(new SpringFormEncoder())
+ .target(UploadResource.class, HTTP_FILE_UPLOAD_URL);
+ Response response = fileUploadResource.uploadFile(file);
+ return response.status() == 200;
+ }
+
+ public String uploadFileWithFallbackFactory(MultipartFile file) {
+ return fileUploadClient.fileUpload(file);
+ }
+
+ public String uploadFileWithFallback(MultipartFile file) {
+ return fileUploadClientWithFallback.fileUpload(file);
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/resources/application.properties
new file mode 100644
index 0000000000..7188b74c9b
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/resources/application.properties
@@ -0,0 +1,10 @@
+server.port=8085
+spring.main.allow-bean-definition-overriding=true
+spring.application.name= openfeign
+logging.level.com.baeldung.cloud.openfeign.client: DEBUG
+feign.hystrix.enabled=true
+
+spring.security.oauth2.client.registration.keycloak.authorization-grant-type=client_credentials
+spring.security.oauth2.client.registration.keycloak.client-id=payment-app
+spring.security.oauth2.client.registration.keycloak.client-secret=863e9de4-33d4-4471-b35e-f8d2434385bb
+spring.security.oauth2.client.provider.keycloak.token-uri=http://localhost:8083/auth/realms/master/protocol/openid-connect/token
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/resources/fileupload.txt b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/resources/fileupload.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/test/java/com/baeldung/cloud/openfeign/OpenFeignFileUploadLiveTest.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/test/java/com/baeldung/cloud/openfeign/OpenFeignFileUploadLiveTest.java
new file mode 100644
index 0000000000..6396be2453
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/test/java/com/baeldung/cloud/openfeign/OpenFeignFileUploadLiveTest.java
@@ -0,0 +1,61 @@
+package com.baeldung.cloud.openfeign;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baeldung.cloud.openfeign.exception.NotFoundException;
+import com.baeldung.cloud.openfeign.fileupload.service.UploadService;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class OpenFeignFileUploadLiveTest {
+
+ @Autowired
+ private UploadService uploadService;
+
+ private static String FILE_NAME = "fileupload.txt";
+
+ @Test(expected = NotFoundException.class)
+ public void whenFileUploadClientFallbackFactory_thenFileUploadError() throws IOException {
+ ClassLoader classloader = Thread.currentThread().getContextClassLoader();
+ File file = new File(classloader.getResource(FILE_NAME).getFile());
+ Assert.assertTrue(file.exists());
+ FileInputStream input = new FileInputStream(file);
+ MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain",
+ IOUtils.toByteArray(input));
+ uploadService.uploadFileWithFallbackFactory(multipartFile);
+ }
+
+ @Test(expected = NotFoundException.class)
+ public void whenFileUploadClientFallback_thenFileUploadError() throws IOException {
+ ClassLoader classloader = Thread.currentThread().getContextClassLoader();
+ File file = new File(classloader.getResource(FILE_NAME).getFile());
+ Assert.assertTrue(file.exists());
+ FileInputStream input = new FileInputStream(file);
+ MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain",
+ IOUtils.toByteArray(input));
+ uploadService.uploadFileWithFallback(multipartFile);
+ }
+
+ @Test(expected = NotFoundException.class)
+ public void whenFileUploadWithMannualClient_thenFileUploadError() throws IOException {
+ ClassLoader classloader = Thread.currentThread().getContextClassLoader();
+ File file = new File(classloader.getResource(FILE_NAME).getFile());
+ Assert.assertTrue(file.exists());
+ FileInputStream input = new FileInputStream(file);
+ MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain",
+ IOUtils.toByteArray(input));
+ uploadService.uploadFileWithManualClient(multipartFile);
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/test/java/com/baeldung/cloud/openfeign/SpringContextTest.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/test/java/com/baeldung/cloud/openfeign/SpringContextTest.java
new file mode 100644
index 0000000000..4bf35f74f4
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/test/java/com/baeldung/cloud/openfeign/SpringContextTest.java
@@ -0,0 +1,16 @@
+package com.baeldung.cloud.openfeign;
+
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = ExampleApplication.class)
+public class SpringContextTest {
+
+ @Test
+ public void whenSpringContextIsBootstrapped_thenNoExceptions() {
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/CustomErrorDecoder.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/CustomErrorDecoder.java
index 4d32cf083f..303a5db526 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/CustomErrorDecoder.java
+++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/CustomErrorDecoder.java
@@ -13,7 +13,7 @@ public class CustomErrorDecoder implements ErrorDecoder {
case 400:
return new BadRequestException();
case 404:
- return new NotFoundException();
+ return new NotFoundException("Not found !!!");
default:
return new Exception("Generic error");
}
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java
index 28d0e95e9a..19f6204b86 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java
+++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/exception/NotFoundException.java
@@ -2,9 +2,6 @@ package com.baeldung.cloud.openfeign.exception;
public class NotFoundException extends Exception {
- public NotFoundException() {
- }
-
public NotFoundException(String message) {
super(message);
}
@@ -15,7 +12,7 @@ public class NotFoundException extends Exception {
@Override
public String toString() {
- return "NotFoundException: "+getMessage();
+ return "NotFoundException: " + getMessage();
}
}
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
index 742a37668b..c0d1962a71 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
+++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
@@ -14,7 +14,7 @@ public class UploadService {
@Autowired
private UploadClient client;
-
+
public boolean uploadFileWithManualClient(MultipartFile file) {
UploadResource fileUploadResource = Feign.builder().encoder(new SpringFormEncoder())
.target(UploadResource.class, HTTP_FILE_UPLOAD_URL);
@@ -29,5 +29,4 @@ public class UploadService {
public String uploadFileError(MultipartFile file) {
return client.fileUpload(file);
}
-
}
\ No newline at end of file