보통 Controller에서 Dto를 받을 때는 @RequestBody를 주로 사용합니다.
그리고 File을 받을 때는 MultipartFile 객체를 사용하며, @RequestParam을 사용합니다.
하지만 File과 Dto를 같이 받기 위해서는 @RequestPart라는 어노테이션이 필요합니다.
File은 @RequestParam, Dto는 @RequestBody를 사용해서 받을려고 했지만 몇번을 시도해도 안되더라고요..
그래서 구글링을 통해 RequestPart라는 어노테이션을 찾아냈습니다.
우선 Controller입니다.
File과 Dto 모두 @RequestPart 어노테이션으로 받도록 합니다.
그리고 Dto인 UserInsertPostReq는 이렇게 구성되어 있습니다.
이전글 에서 사용했던 Dto와 동일합니다.
그리고 Controller에서 호출할 Service의 insertUser 메소드입니다.
파일을 저장할 경로를 지정한 후에 지정한 경로에 파일을 저장하고 DB에 유저 정보를 추가하는 로직입니다.
저는 이를 수행하기 위해 포스트맨을 사용하였습니다.
Key name은 @RequestPart 에서 value로 지정해준 name과 동일한 Key name으로 넣어줍니다.
이제 저기있는 Send를 눌러볼까요?
네 역시나 400에러가 발생합니다.
구글링을 통해 value에 json형식으로 넣는 방법을 알게되었고, 그대로 따라해보았습니다.
이런식으로 Key name은 userInsertPostReq, value는 json 방식으로 작성하였습니다.
다시 Send를 눌러보겠습니다.
이번에는 415 에러가 발생합니다..
한 두 시간 동안은 400, 415에러만 봤던것 같습니다.
이 에러들을 해결하기 위해 구글링을 해본 결과로는
여기서 Dto인 userInsertPostReq는 content type을 application/json으로 지정하면 해결할 수 있습니다.
userInsertPostReq의 content type을 application/json으로 지정한 후 Send를 누릅니다.
그럼 입력한 정보가 잘 들어가는 것을 확인할 수 있습니다.
File과 Dto를 같이 받아올 때 Key name과 content type 설정을 잘못하여 나온 에러 상황이었습니다.
이 방법 외에 다른 방법이 있는지는 잘 모르겠습니다. 더 많은 공부가 필요할 것 같습니다.
지금까지 단일 File과 Dto를 요청하는 것에 대해 알아보았고, 다수의 File과 Dto 요청에 관해서는 아래 링크에서 확인하시면 됩니다.
https://emoney96.tistory.com/375
'Spring' 카테고리의 다른 글
Postman을 이용한 다수의 File, Dto 동시 Post 요청 (0) | 2022.10.08 |
---|---|
@IdClass를 이용하여 복합 키를 복합 키로 갖는 Entity 구현 (0) | 2022.04.13 |
Pagenation이후 sort 문제 (0) | 2021.08.14 |
JpaRepository save를 반복하여 데이터를 추가할 때 update가 되는 문제 (0) | 2021.08.06 |
Entity @GeneratedValue with @IdClass, @EmbeddedId (2) | 2021.08.06 |