부자 되기 위한 블로그, 머니킹

안녕하세요! 오늘도 열심히 개발중에 있습니다. 오늘은 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를 하시면 됩니다.