→ Access Key, Secret Key 다시 설정

MultiPart 이슈

테스트 하기가 정말 너무너무너무 어려웠다

보드의 정보와, image를 같이 등록하려면, 이를 Multipart로 등록해야한다.

보드의 정보를 → Json을 String으로 바꾸어 주어야 한다.

다음과 같이 인수테스트를 작성하였다.

  1. BoardSaveRequest → json을 String으로 바꾸어준다.

이는 ObjectMapper의 도움을 받았다. 예시는 다음과 같다.

"{\\"subject\\":\\"test\\",\\"content\\":\\"test\\",\\"boardType\\":\\"NOTICE\\"}"
  1. MultiPartFile은 MockMultipartFile 파일을 이용했다.

이때 deserialize 문제가 발생했다.

Cannot serialize because cannot determine how to serialize content-type multipart/form-data
java.lang.IllegalArgumentException: Cannot serialize because cannot determine how to serialize content-type multipart/form-data
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:72)
	at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:59)
	at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:277)

→ .multiPart("file", "data", file.getBytes()) → 다음과 같이 전달해서 해결하였다.

최종 코드는 다음과 같다.

BoardSaveRequest boardSaveRequest = BoardSaveRequest.builder()
            .boardType(BoardType.NOTICE)
            .content("test")
            .subject("test")
            .build();
String boardSaveJson = objectMapper.writeValueAsString(boardSaveRequest);
MockMultipartFile file = new MockMultipartFile("data", "test.png",
            MediaType.IMAGE_PNG_VALUE, "test".getBytes());

ExtractableResponse<Response> response = RestAssured
            .given()
            .header("Authorization", accessToken)
            .multiPart("json", boardSaveJson, APPLICATION_JSON_VALUE)
            .multiPart("file", "data", file.getBytes())
            .log().all()
            .when()
            .post("/board")
            .then()
            .log().all()
            .extract();

DataBind 이슈