-
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"; }
객체가 생성되고, 요청 파라미터의 값도 모두 들어가 있다.
실행순서는 다음과 같다.
- 파라미터의 해당 객체를 생성한다
- 요청 파라미터 이름으로 해당 객체의 프로퍼티를 찾는다.
- 프로퍼티의 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