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

anthologia님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 등록

POST 요청시 메서드로 들어오는 BookForm 객체의 생성 주체가 누구인가요?

해결된 질문

22.09.23 17:09 작성

·

362

1

안녕하세요.

코드를 읽어보며 흐름을 파악하다가 궁금증이 생겨 질문 드립니다.

 

public class ItemController {

    @GetMapping("/items/new")
    public String createForm(Model model) {
        model.addAttribute("form", new BookForm());
        return "items/createItemForm";
    }

    @PostMapping("/items/new")
    public String create(BookForm form) {
         ... 생략
    }

 

/items/newGET으로 접근하면, createForm()이 호출되어 BookForm 객체가 생성되고, Model 객체를 통해 viewResolver로 넘어가는 로직은 이해가 됩니다.

 

스크린샷 2022-09-23 오후 5.05.26.png

그러나 POST 요청을 보내면, create()가 호출되어 BookForm 객체를 인자로 받는데요.

이때, 인자로 들어온 BookForm 객체는 GET 요청시 보내준 BookForm 객체와 다른 객체더라구요.

 

아마 누군가가 HTML input 태그에 입력된 값을 BookForm 객체로 변환시켜 넣어주는 것 같은데요.

 

누가 이 책임을 갖고, 어떻게 데이터를 객체로 변환시키는지 그 흐름이 궁금합니다.

 

마치 @ResponseBody에서 HttpMessageConverter가 객체를 JSON으로 변환시켜준 것처럼

이번에도 스프링HttpMessageConverter를 통해 HTML input 데이터를 객체로 변환시켜 Controller에게 반환시켜 주는 걸까요?

 

감사합니다.

답변 1

2

y2gcoder님의 프로필 이미지

2022. 09. 23. 19:46

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

해당 부분은 HandlerMethodArgumentResolver(줄여서 보통 ArgumentResolver)의 구현체에서 담당합니다. 말씀하신 HttpMessageConverter는 요청시에 @RequestBody나 HttpEntity를 담당하는 ArgumentResolver 구현체에서 사용하고 있습니다.

자세한 것은 영한님의 MVC 1편 강의나 HandlerMethodArgumentResolver 를 구글링해주십시오!
감사합니다.

anthologia님의 프로필 이미지
anthologia
질문자

2022. 09. 23. 20:51

기본편까지 듣고 잠깐 넘어왔다가 이제 다시 MVC 1편으로 돌아가는데 곧 나올 내용이었네요!
감사합니다 ㅎㅎㅎ