- @ModelAttribute와@RequestParam 목차
| @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 |