@ModelAttribute 동작 원리 #47
sangwonsheep
started this conversation in
Ideas
Replies: 1 comment
-
조금 더 생각해봐야 할 것 같지만, @Setter를 사용하는 것이 편리할 것 같습니다. 아직 타임리프 동작 방식을 완벽하게 이해하지는 못해서 조금 더 공부해보고 다시 고민해보겠습니다. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
@ModelAttribute
동작 원리@ModelAttribute
는 요청 파라미터를 받아서객체 생성
,값 바인딩
,Model에 담아주는 작업
까지 전부 해줍니다.@RequestParam
은 요청 파라미터를 받아주는 작업만 도와주고 객체를 생성하고 값을 바인딩 하는 작업을 직접해야되는 어노테이션입니다.@ModelAttribute
는 아래와 같이 동작합니다.1-1.
@NoArgsConstructor
: 기본 생성자를 우선 선택1-2. 기본 생성자가 없는 경우에 다른 생성자를 선택 한다.
1-3. 둘 다 있는 경우 파라미터 값과 개수를 보고 알맞는 생성자를 선택한다.
2-1. 매핑되지 않은 필드가 있을 경우 setter로 값을 넣어준다.
2-2. setter가 없는 경우 매핑을 하지 못하기 때문에 해당 필드는
null
이 들어간다.@ModelAttribute("member")
로 지정하면, 아래와 같은 코드를 알아서 추가해줍니다.@ModelAttribute
로 지정하면, 뒤에 적힌 객체 이름을 따라서 만들어 줍니다.Thymeleaf를 이용할 때
@RequestParam
을 이용하지 않고,@ModelAttribute
를 사용했을 때 생기는 문제점에 대해서 다뤄보겠습니다.@RequestBody
와 헷갈리시면 안됩니다...!@Requestbody
가 아닌@ModelAttribute
로 객체를 받아오게 된다.@ModelAttribute
의 경우 가능한 생성자로 객체를 생성하여 매핑한다.문제점
그렇다면, 저희가
setter를 없애고 메서드로 만드는 것이 맞을까
라는 의문이 들기 시작합니다.같이 한 번 고민해보시면 좋을 것 같습니다.
당장 떠오르는 해결 방안
@RequestParam
으로 받기참고 링크 : https://sincere-nova-ec6.notion.site/ModelAttribute-a7c4df7619df486b849c089e34bdf3fd
Beta Was this translation helpful? Give feedback.
All reactions