지금까지 ModelAndView를 생성하고 반환해줬지만, 실무에서는 다음과 같이 실용적으로 코드를 구성한다. 이전 실습에서 V3에서 V4로 넘어가면서 ModelView가 아닌 View를 가리키는 String만 반환하도록 개선한 것과 유사하다.
- @RequestMapping시 실행되는 메서드의 반환형을 ModelAndView → String으로 변환한다.
- 매우 유연하게 구현된 Spring의 @RequestMapping의 메서드에서는 Model을 메서드의 인자로 바로 받아올 수 있는데, 각 메서드별로 Member 추가 및 조회한 다음 model.addAttribute 메서드를 통해 처리를 수행한다.
- 또한, @RequestParam을 통해 HttpServletRequest의 parameter도 바로 선언하여 추출할 수 있다.
@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);
model.addAttribute("member", member);
return "save-result";
}
}
메서드 제한
지금까지는 GET이던 POST이던 구분하지 않고 전부 Spring에서 처리했다. 하지만 바람직한 서비스라면 이를 제한해야 한다.
Spring에서는 다음과 같이 @RequestMapping에서 method를 선언할 수 있다.
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping(value = "/new-form", method = RequestMethod.GET)
public String newForm() {
return "new-form";
}
...
}
Method까지 선언한 @RequestMapping은 다음과 같이 @GetMapping, @PostMapping으로 변경할 수 있다.
@Controller
@RequestMapping("springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String newForm() {
return "new-form";
}
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
@PostMapping("/save")
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";
}
}
'🌱 Spring > MVC ①' 카테고리의 다른 글
[Spring] RequestMapping _ API 매핑 (0) | 2023.07.22 |
---|---|
[Spring] Logging (0) | 2023.07.22 |
[Spring] MVC _ @RequestMapping (1) (0) | 2023.07.22 |
[Spring] MVC _ 어댑터 패턴 (0) | 2023.07.19 |
[Spring] MVC _ 개발자를 위한 기능 개선 (0) | 2023.07.17 |