From c55687ffdfc41cae62f69fce29e3b1854bef038a Mon Sep 17 00:00:00 2001 From: hyxklee Date: Tue, 8 Oct 2024 12:12:11 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=8A=A4=EC=9B=A8=EC=84=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20mulipart=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20?= =?UTF-8?q?=EC=98=AC=EB=A6=B4=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ReceiptAdminController.java | 3 +- .../presentation/NoticeAdminController.java | 5 +-- .../board/presentation/PostController.java | 5 +-- .../swagger/OctetStreamReadMsgConverter.java | 34 +++++++++++++++++++ .../config/{ => swagger}/SwaggerConfig.java | 2 +- 5 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 src/main/java/leets/weeth/global/config/swagger/OctetStreamReadMsgConverter.java rename src/main/java/leets/weeth/global/config/{ => swagger}/SwaggerConfig.java (97%) diff --git a/src/main/java/leets/weeth/domain/account/presentation/ReceiptAdminController.java b/src/main/java/leets/weeth/domain/account/presentation/ReceiptAdminController.java index c182fe94..4fba698b 100644 --- a/src/main/java/leets/weeth/domain/account/presentation/ReceiptAdminController.java +++ b/src/main/java/leets/weeth/domain/account/presentation/ReceiptAdminController.java @@ -5,6 +5,7 @@ import leets.weeth.domain.account.application.usecase.ReceiptUseCase; import leets.weeth.global.common.response.CommonResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -17,7 +18,7 @@ public class ReceiptAdminController { private final ReceiptUseCase receiptUseCase; - @PostMapping + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public CommonResponse save(@RequestPart @Valid ReceiptDTO.Save dto, @RequestPart(required = false) List images) { receiptUseCase.save(dto, images); return CommonResponse.createSuccess(); diff --git a/src/main/java/leets/weeth/domain/board/presentation/NoticeAdminController.java b/src/main/java/leets/weeth/domain/board/presentation/NoticeAdminController.java index 34cc6d11..41ac8c86 100644 --- a/src/main/java/leets/weeth/domain/board/presentation/NoticeAdminController.java +++ b/src/main/java/leets/weeth/domain/board/presentation/NoticeAdminController.java @@ -9,6 +9,7 @@ import leets.weeth.global.common.error.exception.custom.UserNotMatchException; import leets.weeth.global.common.response.CommonResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -23,7 +24,7 @@ public class NoticeAdminController { private final NoticeUsecase noticeUsecase; - @PostMapping + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public CommonResponse save(@RequestPart @Valid NoticeDTO.Save dto, @RequestPart(value = "files", required = false) List files, @Parameter(hidden = true) @CurrentUser Long userId) { @@ -31,7 +32,7 @@ public CommonResponse save(@RequestPart @Valid NoticeDTO.Save dto, return CommonResponse.createSuccess(NOTICE_CREATED_SUCCESS.getMessage()); } - @PatchMapping("/{noticeId}") + @PatchMapping(value = "/{noticeId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public CommonResponse update(@PathVariable Long noticeId, @RequestPart @Valid NoticeDTO.Update dto, @RequestPart(value = "files", required = false) List files, diff --git a/src/main/java/leets/weeth/domain/board/presentation/PostController.java b/src/main/java/leets/weeth/domain/board/presentation/PostController.java index d5391272..22dfed11 100644 --- a/src/main/java/leets/weeth/domain/board/presentation/PostController.java +++ b/src/main/java/leets/weeth/domain/board/presentation/PostController.java @@ -7,6 +7,7 @@ import leets.weeth.global.common.error.exception.custom.UserNotMatchException; import leets.weeth.global.common.response.CommonResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -21,7 +22,7 @@ public class PostController { private final PostUsecase postUsecase; - @PostMapping + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public CommonResponse save(@RequestPart @Valid PostDTO.Save dto, @RequestPart(value = "files", required = false) List files, @CurrentUser Long userId) { @@ -39,7 +40,7 @@ public CommonResponse findPost(@PathVariable Long postId) { return CommonResponse.createSuccess(postUsecase.findPost(postId)); } - @PatchMapping("/{postId}") + @PatchMapping(value = "/{postId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public CommonResponse update(@PathVariable Long postId, @RequestPart @Valid PostDTO.Update dto, @RequestPart(value = "files", required = false) List files, diff --git a/src/main/java/leets/weeth/global/config/swagger/OctetStreamReadMsgConverter.java b/src/main/java/leets/weeth/global/config/swagger/OctetStreamReadMsgConverter.java new file mode 100644 index 00000000..beb6b86a --- /dev/null +++ b/src/main/java/leets/weeth/global/config/swagger/OctetStreamReadMsgConverter.java @@ -0,0 +1,34 @@ +package leets.weeth.global.config.swagger; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Type; + +@Component +public class OctetStreamReadMsgConverter extends AbstractJackson2HttpMessageConverter { + @Autowired + public OctetStreamReadMsgConverter(ObjectMapper objectMapper) { + super(objectMapper, MediaType.APPLICATION_OCTET_STREAM); + } + + // 기존 application/octet-stream 타입을 쓰기로 다루는 메시지 컨버터가 이미 존재 (ByteArrayHttpMessageConverter) + // 따라서 해당 컨버터는 쓰기 작업에는 이용하면 안됨 + @Override + public boolean canWrite(Class clazz, MediaType mediaType) { + return false; + } + + @Override + public boolean canWrite(Type type, Class clazz, MediaType mediaType) { + return false; + } + + @Override + protected boolean canWrite(MediaType mediaType) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/leets/weeth/global/config/SwaggerConfig.java b/src/main/java/leets/weeth/global/config/swagger/SwaggerConfig.java similarity index 97% rename from src/main/java/leets/weeth/global/config/SwaggerConfig.java rename to src/main/java/leets/weeth/global/config/swagger/SwaggerConfig.java index 01350bbc..ee78bcfa 100644 --- a/src/main/java/leets/weeth/global/config/SwaggerConfig.java +++ b/src/main/java/leets/weeth/global/config/swagger/SwaggerConfig.java @@ -1,4 +1,4 @@ -package leets.weeth.global.config; +package leets.weeth.global.config.swagger; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.info.Info;