안녕하세요! 오늘도 열심히 개발중에 있습니다. 오늘은 redirect시에 해당 redirect url 경로의 Controller에 데이터를 넘기는 방법에 대해서 알아보겠습니다.
Redirect Controller
@PostMapping("/container/create")
public String createContainer(@ModelAttribute DummyContainerForm dummyContainerForm,
@AuthenticationPrincipal PrincipalDetails principal,
RedirectAttributes redirAttrs) {
System.out.println("dummyContainer.toString() = " + dummyContainerForm.toString());
User user = userRepository.findByUsername(principal.getUsername());
DummyContainer dummyContainer = DummyContainer.formToEntity(dummyContainerForm);
dummyContainer.setLoginUser(user);
String check = Dummy.dbConectCheck(dummyContainer);
System.out.println("check = " + check);
if (!check.equals("success")) {
redirAttrs.addFlashAttribute("success","DB connect fail : "+check);
return "redirect:/dummy";
}
dummyContainerRepository.save(dummyContainer);
//redirAttrs.addFlashAttribute("direct", "direct");
redirAttrs.addFlashAttribute("success","success");
user.addDummyContainers(dummyContainer);
return "redirect:/dummy";
}
보통 view로 데이터를 넘길 때 스프링에서는 Model 객체를 활용하는데요. redirect controller에서 다음 controller에게 데이터를 넘기는 방법은 RedirectAttribute 객체를 활용하여 addFlash Attribute로 Model 객체에 선으로 데이터를 넣어줄 수 있습니다.
Controller
@GetMapping("/dummy")
public String index(@AuthenticationPrincipal PrincipalDetails principal,
HttpSession session,
Model model) {
// user id에 따라 찾는거 필요함
System.out.println("principal = " + principal.getUsername());
System.out.println("session = " + session);
User user = userRepository.findByUsername(principal.getUsername());
List<DummyContainer> dummyContainerList = dummyContainerRepository.findByUserId(user.getId());
String success = (String)model.getAttribute("success");
if (success == null) {
model.addAttribute("success", "success");
}
System.out.println("redirAttrs = " + model.getAttribute("success"));
//System.out.println("dummyContainerList = " + dummyContainerList.get(0).getDummyBlocks().get(0).getName());
model.addAttribute("dummyContainerForm", new DummyContainerForm());
model.addAttribute("dummyContainerList", dummyContainerList);
//model.addAttribute("success", "success");
return "dummy/dummy_home";
}
이와 같이 Controller 단에서 redirect를 통해 들어왔을 경우 Model 객체에 success 값이 들어있는 것을 확인할 수 있습니다. 만약 redirect를 통해 온 경우가 아닐때에는 model객체가 비어있으며 이를 통해 check를 하시면 됩니다.