less than 1 minute read

1.@RequestParam

@RequestParam은 요청 URL의 파라미터를 연결할 메서드의 매개변수에 붙이는 애너테이션이다.

## 1.1 @RequestParam을 생력하는 경우

@RequestParam은 매개변수로 파라미터 이름을 나타내는 name과 @RequestParam의 필수 여부를 따지는 required를 매개변수로 갖는다. 위의 그림과 같이 required가 false일 경우 @RequestParam을 생략 가능하다. 하지만 required값이 필수가 아닐 경우 null과 “ “(공백)이 요청값으로 들어오면 타입에러가 발생한다. 이런 오류를 막기위해 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’의 value인 ‘date주소’가 Model의 속성으로 함께 저장된다. Model의 속성 값이 저장되면서 더 이상 ‘MyDate’키를 추가하는 코드(m.addAttribute)를 쓰지 않아도 된다.

2.2 반환타입에 적용

@ModelAttribute가 반환타입에 적용되면 메서드의 호출결과를 Model에 저장한다. 여기에 더해 값을 직접 호출한다. 호출까지 함께하기 때문에 호출하는 코드가 삭제된다.


출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)

Comments