1.@RequestParam
@RequestParam은 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션이다. @RequestParam이 쓰이는 경우를 살펴보자.
1-1.@RequestParam을 생략하는 경우
@RequestParam은 기본적으로 매개변수로 파라미터의 이름을 나타내는 name과 @RequestParam 필수 여부를 따지는 required를 매개변수로 갖는다. 그림과 같이 필수 여부를 따지는 required가 false일 경우 @RequestParam을 생략해도 문제가 없다는 의미로 생략이 가능하다. required 값이 필수가 아닐 경우 null과 ""(공백)이 요청값으로 들어올 경우 타입문제가 발생한다. 오류를 막기위해 required 값이 필수가 아닐 경우 기본 값을 1로 지정한다.(defaultValue="1")
1-2.@RequestParam 생략이 불가능한 경우
@RequestParam의 매개변수 required의 값이 true면 @RequestParam은 생략이 불가능하다. HTTP요청을 통해 확인해보면 그림에서 보이는 바와 같이 year값이 null일 경우 요청값이 잘못됐기 때문에 400 Bad Request 즉, 클라이언트 오류가 발생한다.
2.@ModelAttribute
@ModelAttirbute는 적용대상을 Model의 속성으로 자동 추가해주는 애너테이션이다. @ModelAttribute는 반환 타입 또는 컨트롤러 메서드의 매개변수에 적용가능하다. int형과 같은 기본형 속성은 Model객체로 담기지 않는데 @ModelAttribute를 사용하여 강제로 객체로 담을 수 있다.
2-1 컨트롤러 메서드의 매개변수에 적용
메서드의 매개변수에 @ModelAttribute를 사용하면 Model의 속성으로 매개변수의 키와 값이 저장된다. 그림에서는 키의 값이 'MyDate'로 맨 앞글자를 소문자로 쓴 'myDate'가 Model의 속성으로 저장된다. 이와 함께 'MyDate'의 값인 'date주소'가 Model의 속성으로 함께 저장된다. Model의 속성 값이 저장되면서 더 이상 'MyDate'키를 추가하는 코드를 쓰지 않아도 된다.
2-2 반환타입에 적용
@ModelAttribute는 반환타입에도 적용가능하다. @ModelAttribute가 반환타입에 메서드의 호출 결과를 Model에 저장한다. 뿐만 아니라 직접 호출까지 해준다.Model에 저장되는 Key값은 @ModelAttirbute의 매개변수 값("yoil")이 된다. 만약 @ModelAttribute의 매개변수 'yoil'의 값이 '수'라면 모델은 다음과 같은 값이 저장된다.
Key | Value |
"yoil" | 수 |
호출까지 함께 기능하기 때문에 호출 코드도 삭제된다.
출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)
'Spring > SpringMVC' 카테고리의 다른 글
[Spring MVC] 계층의 분리 (0) | 2022.07.30 |
---|---|
[SpringMVC] rediect와 forward (0) | 2022.02.26 |
[SpringMVC] 요청과 응답 (0) | 2022.02.25 |
[SpringMVC] 데이터 변환과 검증 (0) | 2022.02.24 |
[Spring MVC] MVC 패턴 (0) | 2022.02.23 |