Spring을 공부하다가 갑자기 에러가 뿜어져나왔다.
Unsupported Media Type
이게 무슨 오류인지 황당했는데 대충 미디어타입이 잘못되었다는거 같았다.
@PostMapping("/api/user")
public String setUser(@RequestBody RegisterDTO regDto){
return null
}
우선, 이런 형태의 코드였는데 도대체 뭐가 문제인가 싶었다.
중간에 처리해주는 코드가 없더라도 Body에 클라이언트가 보낸 값 정도는 받아올 수 있어야하는거 아닌가? 이게 안되면 Spring은 따로 설정을 해줘야하나?
라는 생각을 하고있을 무렵, 과거 NodeJS를 이용해 백엔드를 하던 기억을 살려 Content-Type 문제인가 하고 있었다.
그렇게 어떤것이 문제인지 알게 되었다.
클라이언트에서 서버로 값을 보낼 때 받아오는 방법이 여러가지 있을텐데, 우선 필자는 아래 두개만 알고 있었다.
이 두개만 알고 있었다.
그런데 내가 사용하는 RequestBody는 어떤 Content-Type을 받아오는지 한번 찾아보았다.
보아하니 Object 형식을 받아온다는것같은데 이를 좀 더 찾아보았다.
정확히 문서에서 찾은것은 아닌데 각종 블로그에서는 @ReqeustBody의 Content-Type은 application/json 형식을 받을 수 있다고 나와있었다.
필자는 insomnia를 이용해서 테스트를 했는데 해당 프로그램에서 Content-Type을 확인해보니 multipart/form-data 형식으로 보내고 있었다.
나중에 이미지를 보내거나 할 때 해당 Content-Type을 이용하는걸로 알고있는데 이를 어떻게 해야하나 고민을 하던 차, 새로운 어노테이션을 알게되었다.
계속 공부를 하다보니 새로운것들이 자꾸 툭툭 튀어나오는데 정말 미칠노릇이다.
자세한 부분은 따로 공부를 해서 블로그에 정리를 해야겠다..
이는 multipart/form-data 를 이용할 수 있다고 해서 해당 어노테이션을 이용하기로 했다.
@PostMapping("/api/user")
public String setUser(@ModelAttribute RegisterDTO regDto){
return null
}
처음에는 415 에러를 내뿜어서 정말 곯머리를 앓았지만
새로운 어노테이션을 알고, 사용을 해 보니 해결했다.
해결한데에서 끝을 내는것이 아니고, 여러 어노테이션을 어떤 케이스에 적절하게 사용하는지 공부와 연습을 해봐야겠다,,