728x90
반응형
@RequestMapping을 잘 보면 클래스 단위가 아니라 메서드 단위에 적용된 것을 확인할 수 있다.
따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다.
SpringMemberControllerV2
package helloMVC.servlet.web.springmvc.v2;
import helloMVC.servlet.domain.member.Member;
import helloMVC.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 클래스 단위 -> 메서드 단위
* @RequestMapping 클래스 레벨과 메서드 레벨 조합
*/
@Controller
// @RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/springmvc/v2/members/new-form")
public ModelAndView newForm() {
System.out.println("SpringMemberFormControllerV1.process");
return new ModelAndView("new-form");
}
@RequestMapping("/springmvc/v2/members/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.getModel().put("member", member);
mv.addObject("member", member);
return mv;
}
// /springmvc/v2/members
@RequestMapping("/springmvc/v2/members")
public ModelAndView members() {
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members);
return mv;
}
}
컨트롤러 클래스를 통합하는 것을 넘어서 조합도 가능하다.
아래의 코드는 /springmvc/v2/members 라는 부분에 중복이 있다.
- @RequestMapping("/springmvc/v2/members/new-form")
- @RequestMapping("/springmvc/v2/members")
- @RequestMapping("/springmvc/v2/members/save")
물론 이렇게 사용해도 되지만, 컨트롤러를 통합한 예제 코드를 보면 어떻게 제거했는지 확인할 수 있다.
클래스 레벨에 다음과 같이 @RequestMapping 을 두면 메서드 레벨과 조합이 된다.
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {}
조합 결과
- 클래스 레벨 @RequestMapping("/springmvc/v2/members")
: 메서드 레벨 : @RequestMapping("/new-form") → /springmvc/v2/members/new-form
: 메서드 레벨 : @RequestMapping("/save") → /springmvc/v2/members/save
: 메서드 레벨 : @RequestMapping → /springmvc/v2/members
package helloMVC.servlet.web.springmvc.v2;
import helloMVC.servlet.domain.member.Member;
import helloMVC.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 클래스 단위 -> 메서드 단위
* @RequestMapping 클래스 레벨과 메서드 레벨 조합
*/
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public ModelAndView newForm() {
System.out.println("SpringMemberFormControllerV1.process");
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.getModel().put("member", member);
mv.addObject("member", member);
return mv;
}
// /springmvc/v2/members
@RequestMapping
public ModelAndView members() {
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members);
return mv;
}
}
728x90
반응형
'스프링 > 스프링 웹' 카테고리의 다른 글
[Spring] 스프링 MVC 기본 기능 학습을 위한 프로젝트 생성 (0) | 2023.06.05 |
---|---|
[Spring] 스프링 MVC 실용적인 방식 (0) | 2023.05.31 |
[Spring] 스프링 MVC로 적용하기 - @RequestMapping, @Controller (0) | 2023.05.31 |
[Spring] 뷰 리졸버(View Resolver) (0) | 2023.05.31 |
[Spring] 핸들러 매핑과 핸들러 어댑터 (0) | 2023.05.25 |
댓글