[SpringBoot] @ModelAttribute binding 이해하기

해니·2023년 12월 14일
0

SpringBoot

목록 보기
6/24
post-thumbnail

@ModelAttribute


@ModelAttribute 역할

  • 클라이언트가 전송하는 폼(form) 형태의 HTTP Body와 요청 파라미터들을 생성자나 Setter로 바인딩하기 위해 사용된다.
    • query string 및 form 형식이 아닌 데이터는 처리할 수 없다.
  • 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는지 등을 포함한 다양한 검증(Validiation) 작업이 추가적으로 진행된다.
    ex) int형 index 변수에 "1번" 이라는 String형을 넣으려고 한다면, BindException이 발생하게 된다.
  • 특정 Parameter 값 만을 가져올 수도 있다.



@ModelAttribute 동작 과정

  1. Reflection을 사용해 필드를 인자로 받는 생성자가 있는지 검사한다.
    1-1. 생성자가 있다면, 해당 생성자를 이용해 값을 세팅하고 없다면 Setter로 값을 세팅한다.
    ex) 모든 필드를 인자로 받는 생성자가 있다면 해당 생성자로 값을 주입한다. 만약 없다면 일부 필드를 인자로 받는 생성자를 찾아 사용하고, 없으면 기본 생성자를 사용해 객체를 생성한다.
  2. 생성자로 주입하지 못한 남은 변수들은 Setter를 이용해 값을 할당한다.

@Getter
@Setter
@ToString
public class Board {

    private int index;
    private String writer;
    private String contents;

    public Board(int index) {
        this.index = index;
    }

    public Board(int index, String writer) {
        this.index = index;
        this.writer = writer;
    }
}

출처: https://mangkyu.tistory.com/72 [MangKyu's Diary:티스토리]



💡 @ModelAttribute를 사용하면 HTTP 파라미터 데이터를 Java 객체에 매핑한다. 따라서, 객체의 필드에 접근해 데이터를 바인딩할 수 있는 생성자setter 메서드가 필요하다.





출처
[Spring] @RequestBody vs @ModelAttribute
[Spring] @RequestBody, @ModelAttribute, @RequestParam의 차이

profile
💻 ⚾️ 🐻

0개의 댓글

Powered by GraphCDN, the GraphQL CDN