이전 글에서 SPRING MVC에서 제공해주는 편의기능들을 이용해서 컨트롤러를 만들어봤다.
뷰를 반환하는 방법으로 ModelAndView를 직접 생성하고 반환을 했는데 이 부분도 좀 더 개선해보자.
먼저 수정한 코드를 확인해보자.
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String process(){
return "new-form";
}
@PostMapping("/save")
public String memberSave(@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 ListMember(Model model){
List<Member> members = memberRepository.findAll();
model.addAttribute("members",members);
return "members" ;
}
}
변화한 부분을 찾아보자.
먼저 각 메서드들의 타입이 ModelAndView에서 String으로 바뀌었고 return 역시 String 타입으로 바뀐 모습이다.
스프링에서 제공해주는 애노테이션 기법으로 개발을 하면 리턴한 문자열을 자동으로 뷰로 인식을 해서 뷰의 논리 이름을 반환해주게 된다.
다음으로 바뀐 부분은 memberSave메서드에서 이전에는 HttpServletRequest, HttpServletResponse를 받고 form에서 받아온 request 값들의 이름을 getParameter로 꺼내서 변수에 저장을 했지만, 매개변수로 직접 전달받은 값을 @RequestParam 애노테이션을 통해 받아서 변수에 저장할 수 있다.
세번째로 바뀐 모습은 컨트롤러에서 클라이언트로 정보를 보낼때 이전의 방식으로는 ModelAndView를 이용해 addObject에 담아서 전달을 했지만 이번엔 String방식이므로 Model이라는 기능을 사용해 addAttribute를 통해 값을 클라이언트로 담아가게 된다.
마지막은 @RequestMapping부분이 바뀌었는데 @RequestMapping의 경우 모든 Http Method를 처리할 수 있다. 예를 들면 GET, POST, PUT, DELETE 등 그러나 이런 방식은 좋은 방식이 아니므로 우리가 직접 원하는 HTTP Method로 매핑을 바꿔서 사용할 수 있다.
정리하자면
- Model 파라미터 save() , members() 를 보면 Model을 파라미터로 받는 것을 확인할 수 있다. 스프링 MVC도 이런 편의 기능을 제공한다
- ViewName 직접 반환 뷰의 논리 이름을 반환할 수 있다
- @RequestParam 사용 스프링은 HTTP 요청 파라미터를 @RequestParam 으로 받을 수 있다. @RequestParam("username") 은 request.getParameter("username") 와 거의 같은 코드라 생각하면 된다. 물론 GET 쿼리 파라미터, POST Form 방식을 모두 지원한다.
- @RequestMapping 은 URL만 매칭하는 것이 아니라, HTTP Method도 함께 구분할 수 있다. 예를 들어서 URL이 /new-form 이고, HTTP Method가 GET인 경우를 모두 만족하는 매핑을 하려면 다음과 같이 처리하면 된다.
'spring' 카테고리의 다른 글
요청 매핑 (0) | 2023.03.27 |
---|---|
로깅 (0) | 2023.03.27 |
SPRING MVC 통합 컨트롤러 (0) | 2023.03.21 |
SPRING MVC 시작하기 (0) | 2023.03.21 |
뷰 리졸버 (0) | 2023.03.21 |