@Controller
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}
@Controller : 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨), 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다(RequestMappingHandlerMapping에서 ).
@RequestMapping : 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
ModelAndView : 모델과 뷰 정보를 담아서 반환하면 된다.
RequestMappingHandlerMapping 은 스프링 빈 중에서 @RequestMapping 또는 @Controller 가
클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식한다.
@Component //컴포넌트 스캔을 통해 스프링 빈으로 등록
@RequestMapping
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}
위와 동일한 동작을 하는 코드
컨트롤러 통합 가능
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public ModelAndView newForm() {
return new ModelAndView("new-form");
}
@RequestMapping("/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mv = new ModelAndView("save-result");
mv.addObject("member", member);
return mv;
}
@RequestMapping
public ModelAndView members() {
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members);
return mv;
}
}
실용적인 방식
@Controller
@RequestMapping("/springmvc/v3/members") //Requst
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
//@RequestMapping(value = "/new-form", method = RequestMethod.GET) // GET인 경우에만 호출
@GetMapping("/new-form")
public String newForm() { //문자로 반환하면 View이름으로 알고 진행
return "new-form";
}
//@RequestMapping(value = "/save", method = RequestMethod.POST)
@PostMapping("/save")
public String save( //request, response를 받아 파라미터를 뽑을 필요없이 그대로 파라미터에 사용가능
@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";
}
//@RequestMapping(method = RequestMethod.GET)
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
@RequestMapping @GetMapping, @PostMapping
@RequestMapping 은 URL만 매칭하는 것이 아니라, HTTP Method도 함께 구분할 수 있다.
@RequestMapping(value = "/new-form", method = RequestMethod.GET)
이것을 @GetMapping , @PostMapping 으로 더 편리하게 사용할 수 있다.
728x90
'Spring' 카테고리의 다른 글
thymeleaf-1 (0) | 2023.12.31 |
---|---|
로깅 (0) | 2023.12.24 |
MVC 프레임워크 / Spring MVC-1 (1) | 2023.12.21 |
[Spring] 빈 생명주기 콜백 (0) | 2023.09.08 |
[Spring] Component Scan (0) | 2023.09.02 |