728x90
게시물을 업로드하면서, 해당 게시물의 썸네일을 이미지로 저장해야 하는 상황이 발생했다.
API를 구성하고 테스트를 돌리기 위해 Postman을 실행시켰는데 에러가 발생했다.
HttpMediaTypeNotSupportedException
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'multipart/form-data;boundary=--------------------------186452156954590287007968;charset=UTF-8' is not supported]
다음과 같은 에러가 발생했다.
위의 에러는 컨트롤러에서 데이터를 받아오는 부분의 코드가 잘못되어 있어서 발생하는 에러이다.
@PostMapping
public Response<RecommendPostResponse> uploadRecommendPost(final Authentication authentication,
@RequestPart(required = false, name = "image") MultipartFile image,
@RequestBody @Valid final RecommendPostRequest request) throws IOException {
...
return Response.success(response);
}
위의 코드를 보게 되면 DTO을 받고 있는 부분이 @RequestBody로 되어 있는 것을 볼 수 있다.
두 가지를 받아 올 때는 RequestBody로 DTO를 받는 것이 아닌, File과 동일하에 @RequestPart를 사용하여 DTO를 받아야 한다.
@PostMapping
public Response<RecommendPostResponse> uploadRecommendPost(final Authentication authentication,
@RequestPart(required = false, name = "image") MultipartFile image,
@RequestPart(name = "request") @Valid final RecommendPostRequest request) throws IOException {
...
return Response.success(response);
}
명령이 씹히는 경우
POSTMAN에서 SEND를 보냈음에도 아무런 명령이 진행되지 않는 경우가 있다.
그럴 땐 POSTMAN form-data를 한 번 확인하는 것이 좋다.
파일과 DTO를 동시에 받기 위해서 우린 @RequestPart를 사용하고 있기 때문이다.
위와 같이 DTO에 포함되는 KEY를 나열하는 것이 아니라, KEY 자체를 @RequestPart(name="")
name에 들어가는 문자열로 변경을 시켜줘야 한다.
1. @RequestPart의 name과 일치하는지 확인.
2. value는 file은 file을 집어넣고 dto는 json 형식으로 입력한다.
3. CONTENT TYPE이 json은 맞는지, 파일은 multipart/form-data이 맞는지 확인한다.
성공!
참조
반응형
'Server > ETC.' 카테고리의 다른 글
[Github] Pull Request (0) | 2023.07.02 |
---|---|
[Github] Issue 생성 (0) | 2023.07.02 |
[GitLab] Branch CI/CD Pass 하는 방법 (0) | 2023.01.25 |
[GitLab&GitHub] GitLab 작업을 GitHub에 연동하기, 미러링 (0) | 2022.12.23 |
[Convention] 깃 커밋 컨벤션 (0) | 2022.11.07 |