고래밥의 삽질일기

[Springboot] Solving RestAssured multipart encoding problem(RestAssured multipart 인코딩 문제 해결하기)(2023.04.06)

개발자만타 2023. 4. 6. 15:55

If you cannot understand Korean Language, just see my code below.

This article contains solving encoding problem in RestAssured multipart encoding(Russian, Japanese, Korean... etc) by UTF-8. In summary, I can solve RestAssured encoding problem by using multipart() method with MultipartSpecBuilder, and set UTF-8 in MultipartSpecBuilder.  
If you like this article, just make comment for me!

상황

RestAssured 로 Springboot 테스트를 수행하던 도중, multipart/form-data 로 데이터를 넘겨주어야 하는 상황이 있었습니다. 하지만, 한글을 써서 Spring MVC Controller 로 정보를 넘겨주는 중 한글이 깨지는 문제가 발생했습니다. 구글링을 통해 많은 상황을 보았고, 러시아어, 일본어 등 많은 알파벳을 제외한 글자가 인코딩이 깨지는 이슈를 발견했지만, 해결책이 아니었습니다. 그래서 직접 공식문서와 코드를 해부해 보았습니다.

이런 식으로 multipart() 를 사용해 텍스트를 넣어 주었다.
한글 부분이 ????? 로 깨져 나오는 것을 볼 수 있었다.

영어는 깨지지 않고, 한글이 깨지는 것을 확인하니, 무조건 인코딩 문제일 것이라 확신했습니다.

원인파악

직접 multipart() method 를 본격적으로 해부해 보았습니다.

groovy 로 구현되어 있는 것을 확인할 수 있었습니다. 실행하면서 알아본 결과, multipart() 에 따로 charset 을 지정해 주지 않으면 UTF-8 이 아닌 다른 인코딩을 사용하고 있고, 한글 인식이 제대로 해당 인코딩에서 되지 않아 문제가 발생하고 있었습니다.

ISO-8859-1 이라는 글도 있었고, 다른 인코딩이 기본 multipart/form-data 인코딩 방식이라는 글을 본 적이 있는데, 아시는 분은 댓글 부탁드립니다!

어쨋든, 인코딩 방식이 달라 문제가 발생하고 있었고, 저는 임시방편으로 아래와 같은 방법으로 해결했습니다.

해결방안 - MultipartSpecBuilder 를 통해 charset 설정하기

I try to make MultipartSpecBulider to set charset UTF-8, and this is the answer to me.
Finally I can see Korean Character is in Controller.

 

좀 복잡해 보이는 방법일 수 있지만, 일단 임시방편으로 MultipartSpecBuilder 를 통해 해결할 수 있었습니다. 

MultipartSpecBuilder 를 받는 multipart() method 가 charset 을 설정해 줄 수 있는 방식인 것 같습니다.

 

 

더 좋은 방법이 있으시다면, 공유 부탁드립니다!

도움되셨다면 좋아요 한번씩 부탁드립니다.