인프런 커뮤니티 질문&답변

조소영님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

질문있습니다

작성

·

68

0

컨트롤러에서 데이터를 받을때

Map<String, Object> param으로 받으려면

에노테이션 @RequestParam으로 받은게 맞을까요? @RequestBody로 받으면 안되는거죠?

답변 1

0

안녕하세요. 조소영님, 공식 서포터즈 y2gcoder입니다.

@RequestParam, @RequestBody는 HTTP 요청에서 데이터를 어떻게 전송하느냐에 따라 다릅니다!

만약 HTTP 요청 시 데이터를 Form 혹은 쿼리 파라미터 등으로 보낸다면 @RequestParam으로 받을 수 있고, JSON 요청과 같이 HTTP 요청 본문에서 바로 값을 받을 때는 @RequestBody로 값을 받을 수 있습니다.

결론은 @RequestBody를 사용해도 Map<String, Object>타입으로 값을 받을 수 있습니다 🙂

 

감사합니다.

조소영님의 프로필 이미지
조소영
질문자

감사합니다!

추가 질문이 있습니다

요청시 Content-type이 text/xml이면 @Requestbody로 받는것이 맞을까요?

말씀하신 것이 맞습니다!
추가로 다음 링크도 참고해보시면 좋을 것 같습니다!
https://www.baeldung.com/spring-xml-requestbody

조소영님의 프로필 이미지
조소영
질문자

마지막으로 질문 하나 더있습니다

컨트롤러에서 map으로 받으면 잭슨컨버터가 적용되고 content-type이 text/xml이면 에러가 발생하는것이 맞나요?

아니면 xml컨버터가 작용하고 content-type이 text/xml로 적용되서 컨트롤러에서 map으로 받는건가요?

XML 또한 JSON 과 같이 타입에 맞는 HttpMessageConverter가 작동한다고 이해해주십쇼!
HttpMessageConverter(MappingJackson2XmlHttpMessageConverter)가 HTTP 요청 본문의 XML을 읽어 Map<String, Object> 로 파싱해서 컨트롤러로 전달해주게 됩니다.