spring

Controller 메소드간 데이터 전달: RedirectAttributes

람대리 2024. 7. 3. 10:56
728x90

RedirectAttirbute란?

리디렉션을 수행할 때 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 attribute를 전달하는데 이용되는 스프링 프레임워크의 인터페이스입니다.

 

RedirecAttribute가 필요할 때

주문이 완료된 후, 주문 결과 상세 페이지로 리다이텍트하여 그 결과를 보여주고 싶을 때 이용할 수 있습니다.

 

RedirectAttirbure 적용

import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class MyController {
    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute("formData") FormData formData,
                             RedirectAttributes redirectAttributes) {
        // Your form processing logic here
        // ...

        // Add attributes to redirectAttributes
        redirectAttributes.addAttribute("orderNumber", "1010233");
        redirectAttributes.addFlashAttribute("message", "Order completed successfully.");

        // Redirect to another page
        return "redirect:/success";
    }
}
출처: https://jake-seo-dev.tistory.com/484 [제이크서 위키 블로그:티스토리]

 

addAttribute와 addFlashAttribute 비교하기

데이터를 넘길 수 있는 2가지 메서드이다.

 

addAttribute는 주소창에 보이게 URL에 추가하여 정보를 넘깁니다.

이용자에게 노출되어도 상관없는 정보들을 넘기는데 사용할 수 있습니다.

URL에 접근하는 한 여러 요청에서 접근 가능합니다.

 

addFlushAttribute는 세션에 적용되고 오직 다음 요청에서만 접근 가능합니다.

세션에 저장되어 사용된 후 자동으로 삭제됩니다.

성공 실패 여부를 알려주는 임시 메시지에는 적합하지 않습니다.

주소창에 표기되지 않으므로 addAttribute보다 폐쇄적입니다.

 

RedirectAttribute로 넘긴 값 접근하기

addAttribute()로 넘겼다면, 기존처럼 @RequestParam을 이용하면 됩니다.

addFlushAttribute()로 넘겼다면, @ModelAttribute를 이용하면 됩니다.

@Controller
public class MyController {
    @GetMapping("/success")
    public String success(@RequestParam("key") String key,
                          @ModelAttribute("message") String message,
                          Model model) {
        // Access query parameter
        System.out.println("Query parameter: " + key);

        // Access flash attribute
        System.out.println("Flash attribute: " + message);

        // Add the message to the model to display in the view
        model.addAttribute("message", message);
        return "success";
    }
}
출처: https://jake-seo-dev.tistory.com/484 [제이크서 위키 블로그:티스토리]