From dbe94624fdbcd0e17b3eedf56881258c95f793cf Mon Sep 17 00:00:00 2001 From: Amitabh Tiwari Date: Mon, 25 Jul 2022 07:12:06 +0530 Subject: [PATCH] Changes to add fallback option. --- .../fileupload/controller/FileController.java | 24 ++++++++------ .../FileUploadClientFallbackFactory.java | 6 ++-- ...java => FileUploadClientWithFallBack.java} | 4 +-- ... FileUploadClientWithFallbackFactory.java} | 7 ++--- .../FileUploadClientWithFallbackImpl.java | 31 +++++++++++++++++++ .../fileupload/service/UploadService.java | 16 +++++----- 6 files changed, 61 insertions(+), 27 deletions(-) rename spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/{FileUploadClient.java => FileUploadClientWithFallBack.java} (73%) rename spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/{UploadClient.java => FileUploadClientWithFallbackFactory.java} (64%) create mode 100644 spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackImpl.java diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java index 102f9825e0..ed726cdb6c 100644 --- a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java +++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java @@ -15,20 +15,26 @@ public class FileController { @Autowired private UploadService service; - @PostMapping(value = "/upload") - public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) { - return service.uploadFile(file); - } - @PostMapping(value = "/upload-mannual-client") public boolean handleFileUploadWithManualClient( @RequestPart(value = "file") MultipartFile file) { return service.uploadFileWithManualClient(file); } - @PostMapping(value = "/upload-error") - public String handleFileUploadError(@RequestPart(value = "file") MultipartFile file) throws NotFoundException { - return service.uploadFileWithCause(file); + @PostMapping(value = "/upload-file") + public boolean handleFileUpload(@RequestPart(value = "file") MultipartFile file) { + return service.uploadFileWithManualClient(file); } - + + @PostMapping(value = "/upload-with-fallbackfactory") + public String uploadFileWithFallbackFactory(@RequestPart(value = "file") MultipartFile file) + throws NotFoundException { + return service.uploadFileWithFallbackFactory(file); + } + + @PostMapping(value = "/upload-with-fallback") + public String uploadFileWithFallback(@RequestPart(value = "file") MultipartFile file) throws NotFoundException { + return service.uploadFileWithFallback(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/FileUploadClientFallbackFactory.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientFallbackFactory.java index 2ccb2709a0..105be15192 100644 --- 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 @@ -8,10 +8,10 @@ import com.baeldung.cloud.openfeign.exception.BadRequestException; import com.baeldung.cloud.openfeign.exception.NotFoundException; @Component -public class FileUploadClientFallbackFactory implements FallbackFactory { +public class FileUploadClientFallbackFactory implements FallbackFactory { @Override - public FileUploadClient create(Throwable cause) { - return new FileUploadClient() { + public FileUploadClientWithFallbackFactory create(Throwable cause) { + return new FileUploadClientWithFallbackFactory() { @Override public String fileUpload(MultipartFile file) { if (cause instanceof BadRequestException) { diff --git a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallBack.java similarity index 73% rename from spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.java rename to spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallBack.java index f7f54138de..a7ca3d6147 100644 --- a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClient.java +++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallBack.java @@ -8,8 +8,8 @@ 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 { +@FeignClient(name = "file", url = "http://localhost:8080", configuration = FeignSupportConfig.class, fallback = FileUploadClientWithFallbackImpl.class) +public interface FileUploadClientWithFallBack { @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-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadClient.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackFactory.java similarity index 64% rename from spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadClient.java rename to spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackFactory.java index 8f3ef7e421..abf9892c19 100644 --- a/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadClient.java +++ b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/FileUploadClientWithFallbackFactory.java @@ -8,11 +8,8 @@ import org.springframework.web.multipart.MultipartFile; import com.baeldung.cloud.openfeign.fileupload.config.FeignSupportConfig; -@FeignClient(name = "file", url = "http://localhost:8081", configuration = FeignSupportConfig.class) -public interface UploadClient { +@FeignClient(name = "file", url = "http://localhost:8080", configuration = FeignSupportConfig.class, fallbackFactory = FileUploadClientFallbackFactory.class) +public interface FileUploadClientWithFallbackFactory { @PostMapping(value = "/upload-file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String fileUpload(@RequestPart(value = "file") MultipartFile file); - - @PostMapping(value = "/upload-file-error", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - String fileUploadError(@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/UploadService.java b/spring-cloud-modules/spring-cloud-openfeign-2/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java index 8a91607562..31b4e385ed 100644 --- 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 @@ -12,12 +12,12 @@ import feign.form.spring.SpringFormEncoder; @Service public class UploadService { - private static final String HTTP_FILE_UPLOAD_URL = "http://localhost:8081"; + private static final String HTTP_FILE_UPLOAD_URL = "http://localhost:8080"; @Autowired - private UploadClient client; + private FileUploadClientWithFallbackFactory fileUploadClient; @Autowired - private FileUploadClient fileUploadClient; + private FileUploadClientWithFallBack fileUploadClientWithFallback; public boolean uploadFileWithManualClient(MultipartFile file) { UploadResource fileUploadResource = Feign.builder().encoder(new SpringFormEncoder()) @@ -25,12 +25,12 @@ public class UploadService { Response response = fileUploadResource.uploadFile(file); return response.status() == 200; } - - public String uploadFile(MultipartFile file) { - return client.fileUpload(file); - } - public String uploadFileWithCause(MultipartFile file) throws NotFoundException { + public String uploadFileWithFallbackFactory(MultipartFile file) throws NotFoundException { return fileUploadClient.fileUpload(file); } + + public String uploadFileWithFallback(MultipartFile file) throws NotFoundException { + return fileUploadClientWithFallback.fileUpload(file); + } } \ No newline at end of file