Spring-MVC (2) 컨트롤러
@RequestMapping
@RequestMapping ?
@RequestMapping 은 애노테이션을 활용한
스프링의 매우 유연하고 실용적인 컨트롤러이다.// 앞서 알아보았듯이 핸들러 매핑과 핸들러 어댑터 선정 기준에서 가장 높은 우선순위를 가진 // @RequestMappingHandlerMapping / @RequestMappingHandlerAdapter 는 // @RequestMapping 을 기반으로 만든 이름이다.
// 스프링이 자동으로 스프링빈으로 등록한다. (@Controller 내부에 @Component 가 포함되어 있어서 Component Scan의 대상이 된다.) @Controller public class CarefreeLifeMemberFormControllerV1 { // 요청정보를 매핑한다. 해당 URL이 호출되면 메서드 실행. @RequestMapping("/springmvc/CarefreeLife/V1/members/new-form") public ModelAndView process() { // 애노테이션을 기반으로 동작하기에 메서드 이름은 아무거나 상관없다. return new ModelAndView("new-form"); // 모델과 뷰의 정보를 담아 반환. } // 후에 String 으로 뷰의 논리 이름만 반환해도 동작하도록 변환.
@RequestMapping("/springmvc/CarefreeLife/V1") // 공통된 상위 URL을 중복 사용하지 않고 한번에 선언이 가능하다.
public class CarefreeLifeMemberControllerV3 {
@GetMapping("/member-form") // /springmvc/CarefreeLife/V1 + /member-form 과 같은 URL 요청시 실행됨.
public String memberForm() {
return "member-form"; // ModelAndView 대신 String 으로 뷰의 논리 이름을 직접 반환 가능.
}
@GetMapping // 추가적인 URL 경로가 지정되지 않으면 @RequestMapping 에 지정된 상위 URL 요청시 실행됨.
public String members(Model model){
...
return "members"; // ModelAndView 대신 String 으로 뷰의 논리 이름을 직접 반환 가능.
}
@PostMapping("/save") // /springmvc/CarefreeLife/V1 + /save 와 같은 URL 요청시 실행됨.
public String saveMember(
@RequestParam("username") String username, // 스프링은 @RequestParam 애노테이션을 사용하여
@RequestParam("age") int age, // HTTP 요청 파라미터를 직접 받을 수 있다.
Model model) { // @RequestParam 은 request.getParameter("username") 과 거의 같은 코드이다.
...
return "save-result"; // ModelAndView 대신 String 으로 뷰의 논리 이름을 직접 반환 가능.
}
// @Get, PostMapping 이외에도 Put, Delete, Patch 등의 애노테이션도 지원한다.
}
@Controller
:- 클래스 레벨에 지정.
- 내부에 Component 애노테이션이 포함되어 있어서 Component Scan의 대상이 된다.
- 스프링이 실행되는 순간 Component Scan에 의해 자동으로 스프링 빈으로 등록된다.
- 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식하게 해준다.
@RequestMapping("URL")
:- 클래스 레벨, 메서드 레벨 지정 가능.
- 요청 정보를 매핑한다. 해당 URL이 호출되면 실행할 메소드를 지정.
- 애노테이션을 기반으로 동작하므로 실행 메서드의 이름은 원하는 대로 지어도 된다.
- 배열로 지정되어 있다. ()안의 URL은 여러개를 넣어 서로 다른 URL로 요청시 같은 뷰를 반환해줄 수 있다.
- ex. @RequestMapping({“/carefree/v1”, “/carefree/v3”}) -> 같은 view or String 반환.
@RequestMapping 의 URL 통합 및 조합 기능
- 컨트롤러의 클래스 레벨에 적용시켜 메서드 단위가 아닌 클래스 단위로 통합이 가능하다.
- 통합 뿐 아니라 아래와 같이 중복되는 상위 URL을 하나로 묶어 클래스 레벨에 적용 후
메서드 단위로 추가적인 URL을 지정하여 조합도 가능하다.- 클래스 레벨 @RequestMapping(“/springmvc/v2/members”) : 공통된 상위 URL 지정
- 메서드 레벨 @RequestMapping(“/new-form”) ➡️ /springmvc/v2/members/new-form
- 메서드 레벨 @RequestMapping(“/save”) ➡️ /springmvc/v2/members/save
- 메서드 레벨 @RequestMapping ➡️ /springmvc/v2/members
(추가적인 URL을 지정하지 않으면 클래스 레벨에 지정된 상위 URL 자체로 지정됨.)
@RestController
- 일반적으로 스프링의
@Controller
애노테이션을 사용하면 반환 값으로 view의 이름을 반환한다.- 이 경우 컨트롤러를 통해 반환된 뷰의 이름을 가지고 뷰 리졸버를 통해 뷰를 렌더링하여 화면에 띄워주게 된다.
- 하지만
@RestController
를 사용하게 되면 반환값으로 view의 이름이 아닌 String을 반환하게 된다.- 이 경우 반환된 String을 HTTP Message Body에 즉각 삽입하여 HTTP response를 하게 된다.
@Restcontroller 사용하여 메시지 바디에 삽입할 String을 반환하는 모습
@Restcontroller에서 반환한 String이 HTTP Message Body에 그대로 삽입되어 있는 모습
- 이 경우 반환된 String을 HTTP Message Body에 즉각 삽입하여 HTTP response를 하게 된다.
최대한의 설명을 코드 블럭 내의 주석으로 달아 놓았습니다.
혹시 이해가 안가거나 추가적인 설명이 필요한 부분, 오류 등의 피드백은 언제든지 환영합니다!
긴 글 읽어주셔서 감사합니다. 포스팅을 마칩니다.
Task Lists
- @RequestMapping 사용법
- @RequestMapping 의 URL 통합 및 조합 기능
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
Comments