[SpringFramework] @ModelAttribute&@RequestParam

2014. 8. 21. 14:27 - Song's IT

@RequestParam은 요청 파라미터를 메소드 파라미터에서 1:1로 받는 것입니다.

이에 반해 @ModelAttribute는 도메인 오브젝트(Input)나 DTO의 프로퍼티에 요청 파라미터를 바인딩해서 한 번에 받는 것입니다.



Input

@ModelAttribute는 Submit된 FORM의 내용을 저장, 입력(Input)하는 기능을 가지고 있습니다.


또힌, 이 과정에서 검증(Validatioin) 작업이 추가적으로 진행됩니다.

예를 들어 int 타입의 변수를 입력받아 Controller의 String 타입의 변수에 저장하려고 할때 @ModelAttribute는 요청 파라미터를 적절히 Type변환을 해 줍니다.

만약 Type변환이 실패한다면 변환된 값 되신 BindException 타입의 에러를 Object에 담아서 Controller에 전달합니다.



이와 같이 @ModelAttribute는 요청 파라미터의 타입과 Controller에서 사용할 Model Object의 프로퍼티 타입과 일치하는지 검증 기능까지 수행하게 됩니다.



@ModelAttribute는 생략이 가능합니다.

public String createMember(@ModelAttribute Member member) { ... } 

public String createMember(Member member) { ... }

위 두 구분은 동일하게 해석되어 작동합니다.





Output

@ModelAttribute의 Output기능은 컨트롤러가 RETURN하는 모델에 파라미터로 전달한 Object를 자동으로 추가하여 전달하는 것입니다.

즉, Model을 다시 View로 넘겨서 출력(Ouput)하기 위해 전달되는 Object의 기능도 가지고 있는 것이죠.



Model의 이름의 기본 값은 파라미터 타입의 이름과 같습니다.

MemberVo 클래스라면 Model 이름은 Member가 됩니다.

public CreateMember(@ModelAttribute Member member){ ... }



다른 이름을 사용하고 싶다면 아래와 같은 형태로 직접 지정할 수 있습니다.

public CreateMember(@ModelAttribute("user") Member member){ ... }

다른 카테고리의 글 목록

Development/SpringFramework 카테고리의 포스트를 톺아봅니다