ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ModelAttribute
    스프링 2023. 1. 1. 13:50

    요청 파라미터를 받아야 할때 어떻게 받을 수 있을까?

     

    @ResponseBody
        @RequestMapping("/request-param-v2")
        public String requestParam2(@RequestParam("username") String memberName, @RequestParam("age") int memberAge) {
            log.info("username={}, age={}", memberName, memberAge);
            return "ok";
        }

    RequetParam으로 지정된 파라미터를 받아올 수 있다.

    또한 여기서 추가로 객체를 생성하여 만들어야 할 때, 생성후 해당 값을 넣어주어야 하는 과정을 거쳐야 한다.

     

    이 과정을 ModelAttribute는 생략시킬 수 있다.

     

    @ResponseBody
    @RequestMapping("/model-attribute-v1")
        public String modelAttributeV1(@ModelAttribute HelloData helloData) {
         log.info("username={}, age={}", helloData.getUsername(),
        helloData.getAge());
         return "ok";
    }

    객체가 생성되고, 요청 파라미터의 값도 모두 들어가 있다.

    실행순서는 다음과 같다.

    1. 파라미터의 해당 객체를 생성한다
    2. 요청 파라미터 이름으로 해당 객체의 프로퍼티를 찾는다.
    3. 프로퍼티의 setter를 호풀하여 바인딩을 한다.

    스프링은 ModelAttribute나 RequestParam생략시 다음과 같은 규칙을 적용한다.

    • String , int , Integer 같은 단순 타입 = @RequestParam
    • 나머지 = @ModelAttribute (argument resolver 로 지정해둔 타입 외)

     

    프로퍼티

    객체에 getUsername() , setUsername() 메서드가 있으면, 이 객체는 username 이라는 프로퍼티를 가지고 있다.

    username 프로퍼티의 값을 변경하면 setUsername() 이 호출되고, 조회하면 getUsername() 이 호출된다.

     

    만일 타입이 맞지 않다면 bindingException이 발생한다.

    따라서 이러한 오류를 처리한는 검증과 오류처리 로직히 필요하다.

     

     

    728x90

    '스프링' 카테고리의 다른 글

    로그인 처리 - 쿠키  (0) 2023.01.06
    도메인 설계  (0) 2023.01.06
    스프링 MVC의 사용  (0) 2022.12.26
    핸들러 매핑, 핸들러 어댑터, 뷰 리졸버  (0) 2022.12.26
    스프링 MVC  (0) 2022.12.26

    댓글

Designed by Tistory.