From 8ccbf91ec765d599ab4d4ae1b59dc24eaf9592d6 Mon Sep 17 00:00:00 2001 From: Amitabh Tiwari Date: Thu, 30 Jun 2022 15:11:18 +0530 Subject: [PATCH] Initial Changes for BAEL-5297 --- .../exception/NotFoundException.java | 4 ++- .../fileupload/controller/FileController.java | 5 ++-- .../fileupload/service/FileUploadClient.java | 15 ++++++++++ .../FileUploadClientFallbackFactory.java | 30 +++++++++++++++++++ .../fileupload/service/UploadService.java | 7 +++++ 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java 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..1aba89e330 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,7 +2,9 @@ package com.baeldung.cloud.openfeign.exception; public class NotFoundException extends Exception { - public NotFoundException() { + private static final long serialVersionUID = 1L; + + public NotFoundException() { } public NotFoundException(String message) { diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java index 1ddbfcea81..102f9825e0 100644 --- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import com.baeldung.cloud.openfeign.exception.NotFoundException; import com.baeldung.cloud.openfeign.fileupload.service.UploadService; @RestController @@ -26,8 +27,8 @@ public class FileController { } @PostMapping(value = "/upload-error") - public String handleFileUploadError(@RequestPart(value = "file") MultipartFile file) { - return service.uploadFile(file); + public String handleFileUploadError(@RequestPart(value = "file") MultipartFile file) throws NotFoundException { + return service.uploadFileWithCause(file); } } \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.java new file mode 100644 index 0000000000..f7f54138de --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.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 FileUploadClient { + @PostMapping(value = "/upload-file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + String fileUpload(@RequestPart(value = "file") MultipartFile file); +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java new file mode 100644 index 0000000000..74e1e703a9 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/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 FileUploadClient create(Throwable cause) { + return new FileUploadClient() { + @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/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..e9db87b532 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 @@ -4,6 +4,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import com.baeldung.cloud.openfeign.exception.NotFoundException; + import feign.Feign; import feign.Response; import feign.form.spring.SpringFormEncoder; @@ -14,6 +16,8 @@ public class UploadService { @Autowired private UploadClient client; + @Autowired + private FileUploadClient fileUploadClient; public boolean uploadFileWithManualClient(MultipartFile file) { UploadResource fileUploadResource = Feign.builder().encoder(new SpringFormEncoder()) @@ -30,4 +34,7 @@ public class UploadService { return client.fileUpload(file); } + public String uploadFileWithCause(MultipartFile file) throws NotFoundException { + return fileUploadClient.fileUpload(file); + } } \ No newline at end of file