티스토리 뷰

Spring

@ModelAttribute와@RequestParam

Xion 2020. 7. 26. 13:36

| @ModelAttribute 이란?

클라이언트가 전송하는 여러개의 파라미터들을 1:1로 객체에 바인딩 하여 다시 View로 넘겨서 출력하기 위해 사용되는 Object입니다.

매핑시키는 파라미터의 타입이 객체의 type과 일치하는지를 포함한 다양한 검증(Validation) 작업이 추가적으로 진행됩니다.

( 예를들어, 게시물 번호를 저장하는 int형 index 변수에 "1"이라는 String 값을 넣으면 BindException 발생 )

@RequestBody의 경우 Json이나 XML을 Jackson과 같은 MessageConverter를 사용하면 변환하지만,

이 어노테이션은 여러 개의 파라미터를 바로 java bean 객체로 mapping 시킵니다.

즉, JSP에서 form 태그를 통하여 전달받은 파라미터들은 객체로 바인딩 시키는 경우에 사용할 수 있습니다.

 

@ModelAttribute와 @RequestBody의 차이점

- 보다 극단적으로 설명하자면 @ModelAttribute는 바인딩 시키는 어떤 데이터를 set 해주는 Setter 함수가 없다면 매핑이 되지 않는다.
하지만 @RequestBody는 요청받은 데이터를 변환시키는 것이기 때문에, Setter 함수가 없어도 매핑이된다.

( * ModelAttribute는 세션에 있는 정보도 바인딩 받습니다 !!! ) 

 

 

 

| @RequestParam 이란?

요청 파라미터를 메소드에서 1:1로 받기 위해 사용한다.

@RequestParam을 사용하면 기본적으로 반드시 해당 파라미터가 전송되어야 한다. 

속성

required : ( default : true ) 반드시 필요하지 않은 경우라면 false로 설정 !!
defaultValue : required 속성이 false라면 대체해줄 값 설정

 

// test case는 성공입니다.

 

| @RequestParam 생략 ?

@RequestParam은 사실 생략도 가능합니다.

 

 

| @RequestParam 사용 이유


사용자가 원하는 매개변수에 mapping 하기 위해서 사용합니다.

사실 Spring은 @RequestParam을 사용하지 않아도 사용자가 입력한 Parameter의 key값 과 매개변수의 이름을 비교 하여 값을 적절히 넣어줍니다.

단, 컨트롤러에서 매개변수의 이름과 form에서의 파라미터 명과 같아야합니다.

그렇지 않으면 null값으로 값이 채워집니다.

 

따라서, 원하는 이름으로 값을 받고 싶을 때는 @RequestParam을 적절하게 활용하면 되겠습니다 !

'Spring' 카테고리의 다른 글

[springSecurity]스프링 시큐리티  (0) 2020.08.08
[springSecurity]스프링 시큐리티  (0) 2020.08.08
@RequestBody,@ResponseBody  (0) 2020.07.25
메시지 컨버터란?  (0) 2020.07.25
@RequestMapping의 produces,Content-Type,Consumes란?  (1) 2020.07.25