스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작하므로 매우 유연하고 실용적이다.
@RequestMapping
스프링은 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 만들었는데
이것이 바로 @RequestMapping을 사용하는 컨트롤러이다.
실무에서도 거의 이 방식의 컨트롤러를 사용
- @controller
- 스프링이 자동으로 스프링 빈으로 등록(내부에 @Component 애노테이션이 있어 컴포넌트 스캔의 대상)
- 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식
- @RequestMapping
- 요청 정보를 매핑
- 해당 URL이 호출되면 이 메서드가 호출된다. 메서드의 이름은 임의로 작명
- ModelAndView
- 모델과 뷰 정보를 담아서 반환
application.properties에 prefix와 suffix를 설정해두었기 때문에 매핑되어 해당 뷰가 반환되었음.
RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가
클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식
- 이렇게 작성하여도 @Controller를 붙인 것과 똑같이 동작한다
회원 저장 컨트롤러
회원 목록 컨트롤러
스프링이 제공하는 ModelAndView 를 통해 Model 데이터를 추가할 때는 addObject() 를 사용하면 된다. 이 데이터는 이후 뷰를 렌더링 할 때 사용된다.
컨트롤러 통합
현재 @RequestMapping이 클래스 단위가 아닌 메서드 단위에 적용되어 있다. 따라서 컨트롤러 클래스들을 유연하게 하나로 통합해보자
위와 같이 하나로 묶어서 사용할 수 있다.
또한 현재 RequestMapping의 /springmvc/v2/members/가 중복되어 사용되는 것을 볼 수 있는데
공통부분의 매핑을 클래스 단위에 두어 중복을 제거할 수 있다.
위와 같이 사용하게 되면 클래스 단위의 매핑정보와 조합된다.
- ex) /springmvc/v2/members + /new-form = /springmvc/v2/members/new-form
실용적인 방식
Model 파라미터
- 스프링 MVC가 제공하는 Model을 파라미터로 받을 수 있다.
ViewName 직접 반환
- 뷰의 논리 이름을 반환할 수 있다.
@RequestParam
- 스프링은 HTTP 요청 파라미터를 @RequestParam 으로 받을 수 있다.
- @RequestParam("username") 은 request.getParameter("username") 와 거의 같은 코드라 생각하면 된다.
- GET 쿼리 파라미터, POST Form 방식을 모두 지원한다.
Postman을 사용하여 직접 테스트해보면
GET/POST에 상관없이 응답이 오는 것을 확인할 수 있다.
@RequestParam을 사용하면 HTTP 메서드에 상관없이 사용되기 때문에 이를 개선하기 위해
어떤 것은 GET을 사용해야하고, 어떤것은 POST를 사용해야하도록 지정해줄 수 있다.
GET은 주로 조회에 사용되고 POST는 수정에 사용되는데 이를 상관없이 사용하게 되면
많은 문제들이 발생할 수 있기 때문에 이를 지정해주는 것이 좋은 설계이다.
@RequestParam의 속성 중에 method 속성을 통해 지정해줄 수 있다.
이 상태에서 POST방식으로 서버로 요청을 전송하니 405 오류가 발생하는 것을 확인할 수 있다.
이것보다 더 편리한 방식으로 스프링이 제공하는데 바로 @GetMapping, @PostMapping이다.
Get, Post, Put, Delete, Patch 모두 애노테이션이 제공된다.
애노테이션을 위한 애노테이션 ㅋㅋ
반응형
'Spring > Spring MVC' 카테고리의 다른 글
요청 매핑 (0) | 2021.05.06 |
---|---|
로깅 간단히 알아보기 (0) | 2021.05.03 |
ViewResolver (0) | 2021.05.01 |
Handler Mapping & Handler Adapter (0) | 2021.04.30 |
Spring MVC 전체 구조 (0) | 2021.04.30 |