본문 바로가기
TIL : Today I learned (or Week)

TIL 230622 : Dto에 값을 넣어보자 (RequestBody, ModelAttribute)

by 우인입니다 2023. 6. 22.

문제

 : Controller에서 Dto에 값이 넣어지지 않았다. 항상 이런 건 강의 잘 보고 따라하며 과제를 하고 있는데, 똑같이 했는데 안된다.

 

바로 저기에 log를 넣어보았는데, null로 나온다.

 


시도

@ModelAttribute

@ModelAttribute 어노테이션을 달아보았지만 소용없었다.

 

 

 

분명 강의에서는 생략했었다. 아마도 이는 @RequestParam 혹은 @ModelAttribute 중 하나가 자동으로 적용되며 생략이 가능했었을텐데, 받는 데이터는 원시타입이 아니기에 @ModelAttribute로 이미 적용 중이었을 것이다. 그러니 이미 @ModelAttribute달고도 오류가 나고 있던 것이니 아무런 효과가 없었을거라는 뜻.

 

 

@RequestBody

혹시나 하는 마음에 @RequestBody를 달아보니 값이 잘 들어온다.

 

 


원인

Body에 데이터가 들어오더라도, 받아들이는 데이터의 유형이 달랐다.

기존 강의에서는 예제html에서 FormData타입으로 주고 있어서 생략이 가능했지만, 나는 Postman으로 JSON데이터를 보내주고 있었다.

 


결론

 

Model Attribute는 생략가능, 폼데이터를 받음. 쿼리스트링 형태로 넘어온 데이터를 받아들임.

RequestBody는 생략 불가능, Body의 JSON데이터를 받아 객체로 담아줌.

 

 

단순해 보이는 개념으로도 크게 흔들리는 단계인 듯 하다.
많이 답답하다가도, 그만큼 능숙해지는 거라고 믿는다.