ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - @ModelAttribute : 객체로 쿼리 파라미터 바인딩
    Spring/Spring MVC 2021. 12. 26. 14:49
    728x90
    반응형

     

     

     

     

    @ModelAttribute : 객체로 쿼리 파라미터 바인딩

     

    쿼리 파라미터로 넘어오는 변수들은 객체로 주입받을 수 있다.

     

     

     

     

    @ModelAttribute로 쿼리 파라미터 데이터들을 객체로 주입받기

     

    • @ModelAttribute을 이용하면 쿼리 파라미터의 데이터들은 객체의 프로퍼티로 바인딩이 된다.
    • 즉, 전달되는 쿼리 파라미터의 이름과 동일한 프로퍼티에 자동으로 바인딩이 된다.
    • 프로퍼티에 해당하는 쿼리 파라미터가 없을 경우 기본값이 들어간다.
    • @ModelAttribute는 생략이 가능하다.
    • 이러한 객체를 커맨드 객체(Command Object)라 부른다.
    • request영역에 자동으로 저장이 된다.

     

     먼저 쿼리 파라미터의 데이터들을 주입받을 수 있는 객체를 생성하기 위해 클래스를 생성한다.

    @Data
    public class UserData {
    	private String username;
    	private int age;
    }

     

    @Data는 lombok의 애노테이션이며
    @Getter, @Setter, @ToString,
    @EqualsAndHashCode, @RequiredArgsConstructor
    들을 만들어 준다.

     

    요청 URL /model-attribute-v1
    요청 URL /model-attribute-v1?username=userA&age=20

    @Slf4j
    @RestController
    public class RequestParamController {
    
        @GetMapping("/model-attribute-v1")
        public String modelAttributeV1(@ModelAttribute UserData userData) {
        
            log.info("username={}, age={}", userData.getUsername(), userData.getAge());
            return "ok";
        }
    }

     넘어오는 데이터명과 객체에 바인딩 프로퍼티의 이름이 같아야 주입이 되며, 해당 값이 안 넘어오면 객체 멤버 변수는 각 자료형에 맞게 자동으로 기본값이 대입된다. ( ex- int = 0, String = null, boolean = false....)

     

     



    참고

     프로퍼티(Property란?)

     자바 빈즈 규약을 보면 재사용이 가능한 객체를 빈(Bean)으로 명명한다. 이 Bean을 클래스 외부에서 필드에

    접근할 경우에는 반드시 메서드를 통해 접근해야 하는데 property는 객체와 관련하여 이름 붙여진 속성을

    말하며 빈이 관리하는 데이터를 의미한다.

    • 프로퍼티 값을 구하는 메서드와 프로퍼티 값을 변경하는 메서드 - getter, setter
    • 인스턴스 변수, getter, setter를 묶어서 property라 한다.

     

    728x90
    반응형

    댓글

Designed by Tistory.