ModelAttribute

Kkd·2024년 12월 22일
0

매일메일 개념정리

목록 보기
52/93

@ModelAttribute는 Spring MVC에서 자주 사용되는 애노테이션으로, 컨트롤러 메서드의 파라미터 또는 리턴값에 바인딩된 객체를 처리하거나, 뷰에서 사용할 데이터를 모델에 추가하는 데 사용됩니다. 아래에서 두 가지 주요 사용 사례를 설명하겠습니다.


1. 메서드 파라미터 바인딩

@ModelAttribute는 요청 파라미터를 특정 객체에 바인딩하는 데 사용됩니다. HTTP 요청의 폼 데이터나 URL 쿼리 파라미터를 자바 객체에 자동으로 매핑합니다.

사용 예시:

public class User {
    private String name;
    private int age;

    // Getter & Setter
}
@Controller
public class UserController {

    @PostMapping("/user")
    public String createUser(@ModelAttribute User user) {
        // 요청 파라미터를 User 객체에 매핑
        System.out.println(user.getName());
        System.out.println(user.getAge());
        return "userView";
    }
}

요청 데이터:

POST /user
Content-Type: application/x-www-form-urlencoded

name=John&age=25

결과:

  • name=Johnuser.name에 매핑.
  • age=25user.age에 매핑.

Spring이 자동으로 객체를 생성하고 값을 설정해 줍니다.


2. 모델에 데이터 추가

@ModelAttribute를 컨트롤러의 메서드 위에 선언하면, 해당 메서드의 반환값을 모든 뷰에서 사용할 수 있도록 모델에 자동 추가합니다.

사용 예시:

@Controller
public class UserController {

    @ModelAttribute("commonData")
    public String populateCommonData() {
        return "This is common data";
    }

    @GetMapping("/example")
    public String examplePage() {
        return "exampleView";
    }
}

결과:

모든 뷰에서 commonData라는 이름으로 데이터를 참조할 수 있습니다.

<p th:text="${commonData}"></p>

주요 동작 과정

  1. 데이터 바인딩: 요청 파라미터 -> 객체 속성.
  2. 검증 및 변환: Spring Validator 및 Converter를 사용해 입력 값 검증 및 형 변환.
  3. 모델 추가: 메서드의 반환값을 모델에 포함.

주의점

  1. 데이터 검증: @ModelAttribute로 매핑된 객체는 @Valid와 함께 사용해 데이터 유효성을 검증할 수 있습니다.
  2. 중첩 객체: 객체 내에 중첩된 필드도 자동으로 바인딩됩니다.
  3. 이름 충돌: 모델 속성 이름이 명시되지 않으면 객체의 클래스 이름(소문자로 시작)이 기본 키로 사용됩니다.

추가 팁

  • @RequestParam과 비교해 복잡한 객체 매핑에 적합합니다.
  • 일반적으로 폼 데이터를 처리하거나, 모델에 공통 데이터를 추가할 때 유용합니다.

추가 학습 자료

profile
🌱

0개의 댓글