v2 방법 -> 하나의 컨트롤러에 메서드를 모아서 작성
요청마다 나눴던 컨트롤러의 메서드를 한 클래스에 모아서 사용이 가능하며
동일한 uri 주소는 컨트롤러에 @RequestMapping 어노테이션을 활용하여 클래스 레벨에 작성해주고,
고유한 uri 주소는 메서드 단에 @RequestMapping 어노테이션을 활용하여 작성해주면
컨트롤러가 실행되면서 두 uri 를 조합하여 사용하게 된다.
@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
public ModelAndView members() {
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members);
return mv;
}
@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");
// ModelAndView 에서 지원해주는 메서드
mv.addObject("member", member);
return mv;
}
}
v3 방법 -> ModelAndView 객체를 반환하는 것이 아닌 String 으로 뷰의 이름만 반환함.
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public String newForm() {
return "new-form";
}
@RequestMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
@RequestMapping("/save")
public String save(
@RequestParam ("username") String username,
@RequestParam ("age") int age,
Model model){
Member member = new Member(username, age);
memberRepository.save(member);
// ModelAndView 에서 지원해주는 메서드
model.addAttribute("member", member);
return "save-result";
}
}
- 리턴 타입을 String 으로 변경
- String 을 return 하면 알아서 뷰의 이름으로 인식하고 해당 뷰를 찾아 렌더링 한다.
- @RequestParam 어노테이션을 활용하여 파라미터를 간편하게 받아올 수 있다.
- request.getParmeter("username") 과 같은 코드라고 생각하면 됨.
- Model 객체를 활용 : addAttribute() 메서드를 활용하여 model 객체에 값을 키-값 쌍으로 넣어준다.
하지만 아직 GET, POST 등 HTTP method 를 사용하지 않았다.
이런 방식으로 http method 를 함께 정해준다.
@RequestMapping 으로 모두 동일하게 해줘도 postman 으로 uri 요청 시 문제 없이 페이지를 불러오는 것을 볼 수 있다.
(이때 GET, POST 등 어떻게 요청해도 모두 잘 불러와짐 / 두 가지 방식을 모두 지원함.)
하지만!
Http Method 로 구분을 명확하게 해주는 것이 좋은 설계다!
HTTP method 를 정해주면
해당 http method 가 아니라면 postman 요청 시 불러오지 못하게 된다!
하지만 조금 너무 긴 것 같다...
짠! 간단한 어노테이션으로 표현가능하다! 호호...
'👩💻 BackEnd > 🌿 스프링 [Spring]' 카테고리의 다른 글
[ Spring / Spring Boot ] 스프링 인터셉터 활용하여 인가작업 처리하기 (0) | 2024.05.05 |
---|---|
interceptor 3가지 메서드 (0) | 2024.05.04 |
[Spring MVC] DispatcherServlet / 핸들러 매핑과 핸들러 어댑터 (0) | 2024.01.19 |
[Spring MVC] MVC 패턴 구현해보기 / Adapter 패턴 / 유연한 컨트롤러 구현 (0) | 2024.01.17 |
[Spring MVC] Section 4. MVC 프레임워크 만들기 (0) | 2024.01.13 |