작성
·
235
1
수업시간에 만들어본 create 메서드는 HTML form태그로 보낸 요청에 제대로 동작했습니다. 그래서 postman에서 요청을 보내도 잘 될거라 생각했습니다. 그런데 제대로 동작하지 않더라구요. 구글링을 해보니 파라미터에 @RequestBody 를 붙여야 한다는 내용을 찾았습니다. 따라하니까 제대로 동작하긴 하는데, HTML form을 통해 전달받는것과, 외부 api 테스팅 도구로 body에 값을 넣어서 전달하는게 어떤 차이가 있는지 궁금합니다. 더불어 @RequestBody가 어떤 역할을 하는지도 궁금합니다!
답변 3
1
김영한님 자세한 답변 감사합니다!
대부분의 api content-type이 application/json으로 되어있어서 그거만 있는 줄 알았는데 다양한 타입이 있었네요 ㅎㅎ
0
0
안녕하세요. taehongkim496님 좋은 질문입니다.
아마 postman에 보시면 Body 부분에 x-www-form-urlencoded라는 것이 있고, 또 raw라는 것이 있을꺼에요.
HTTP 요청에서 HTML의 form데이터를 보낼때는 content-type이라는 해더정보가 함께 넘어가는데 이때는 application/x-www-form-urlencoded 이라는 정보가 포함되어서 넘어갑니다.
그래서 html form 처럼 동작하려면 해당 옵션을 선택하시면 됩니다.
@RequestBody는 이름 그대로 HTTP 요청의 body 부분 데이터를 그대로 스프링에서 받고 싶을 때 사용합니다. 문자로 받을 수도 있고, JSON 같은 내용 객체로도 받을 수 있습니다.
POSTMAN에서는 raw를 선택하면 됩니다^^ 그러면 선택하는 추가 옵션에 따라 content-type에 text/plain, application/json으로 요청하게 됩니다.
이 부분에 대한 자세한 내용은 준비중인 실전! 스프링 웹 MVC 강의에서 매우 자세히 설명드릴께요^^
도움이 되셨길 바래요