@RequestMapping
- 어노테이션 기반의 컨트롤러를 지원하는 핸들러 매핑과 어탭터
→ 핸들러 매핑 / 핸들러 어댑터를 통해 실제 핸들러가 호출 - 실무에서는 99.9% 이 방식의 컨트롤러를 사용
RequestMapping
의 인터페이스RequestMappingHandlerMapping
: RequestMapping의 핸들러 매핑RequestMappingHandlerAdapter
: RequestMapping의 핸들러 어댑터
동작 방식
- HTTP Request를 통해 요청
- 핸들러 매핑 탐색 :
HandlerMapping
을 순회하며 해당하는RequestMappingHandlerMapping
반환 - 핸들러 어댑터 조회 :
HandlerAdapter.supports()
를 순서대로 호출하며 처리할 수 있는 핸들러 어댑터를 탐색 → 예시에서는RequestMappingHandlerAdapter
를 찾음 - 핸들러 어댑터 실행 :
RequestMappingHandlerAdapter
로 실제 핸들러 호출 → ModelAndView를 반환(실무에서는 ViewName 반환) - 뷰 리졸버 실행 : 논리주소를 실제 물리 주소로 변환
- view : view 렌더링
스프링 MVC의 시작
컨트롤러
@Controller
@RequestMapping("/springmvc/v3/members") //공통path를 지정해줌
public class SpringMemberControllerV3 {
private final MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form") //공통 path + "/new-form" 및 Get요청만 Mapping
//@RequestMapping(value = "/new-form", method = RequestMethod.GET)
public String newForm() {
return "new-form";
} //문자를 반환해도 스프링 내부에서 뷰 이름으로 인식해서 찾아준다.
@PostMapping("/save") //Post요청 Mapping
//@RequestParam을 이용해서 요청 파라미터를 바로 받는다.
public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model ) {
Member member = new Member(username, age);
memberRepository.save(member);
model.addAttribute("member", member);
return "save-result";
}
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findALl();
model.addAttribute("members", members);
return "members";
}
}
- 클래스에
@RequestMapping
을 이용해서 공통path를 지정 할 수 있다. @RequestParam
을 이용해서 요청 파라미터를 바로 받을수 있다.ModelAndView
를 반환하지 않고viewName
을 반환하므로 편리하다.@RequestMapping
→@GetMapping
,@PostMapping
반응형