작성
·
148
0
createMemberForm.html에서 input에 값을 입력하고 '등록'버튼을 눌러서 컨트롤러에 요청하는 부분을 공부하고 있습니다.
여기서 한 가지 의문점이 생겼는데요
제가 알고 있기론 html에서 컨트롤러로 요청될 때 순서가
1. html에서 스프링 컨테이너로 url을 요청하면 그걸 컨트롤러에서 받음.
2. 비즈니스 로직을 수행하고 적절한 값을 리턴
이런식인걸로 알고 있습니다.
그래서
1. createMemberForm.html에서 id 값을 input에 입력한 후 등록버튼을 눌러주면 @PostMapping(value="/member/new")로 전달되는거까진 이해가 가는데
2. 그 아래 메서드 public String create(MemberForm form) 에서는 어떻게 MemberForm 클래스와 상호작용하는건지 모르겠습니다.
MemberController에 써준 String create(MemberForm form) 메서드에서 파라미터를 받을 때
html에서 전송되는 form 값이 MemberForm 클래스를 거쳐서 오는 것 같이 보여지는데..
별개로 생성된데다가 @Controller도 써주지 않은 MemberForm 클래스와 어떻게 연결되는건가요?
그냥 MemberForm form 이렇게 써주면 자동적으로 스프링이 MemberForm 클래스를 찾아서 거기서 form으로 전송된
name 값을 setter로 MemberForm 클래스 객체에 저장하고 다시 public String create(MemberForm form) 메서드로 가져오는 것인가요?
그렇다고 하기엔, MemberForm 클래스는 @Controller도 안 해주었기 때문에 스프링 컨테이너에 등록이 안 된 상태 아닌가요?
답변 1
1
안녕하세요. chiacn님
HTML Form에서 전송을 시도하면
URL: /members/new
전송 값: name=Hello Spring
이렇게 전송됩니다.
그러면 다음 부분에서 받게 됩니다.
@PostMapping(value = "/members/new")
public String create(MemberForm form)
궁금하신 부분이 여기에서 MemberForm이 어떻게 값이 들어오는지로 이해했습니다.
스프링은 우선 MemberForm객체를 생성합니다. 내부에서 form = new MemberForm() 이렇게 처리됩니다.
그 다음에 파리미터로 넘어온 name이라는 이름을 memberForm 객체에서 찾습니다.
그리고 setter를 호출합니다. 여기서는 setName(..)이 호출됩니다.
이렇게 값을 모두 할당한 다음에 create(...)메서드가 호출됩니다.
관련해서 더 깊이 있는 자세한 내용은 다음 강의를 참고해주세요^^
감사합니다.
오.. 이렇게 동작하는거였군요. 답변 감사합니다!