Spring

[Spring] RedirectAttributes 정리

obin01 2025. 3. 23. 19:37

1. RedirectAttributes 란?

스프링에서 리다이렉트를 사용할 때 Model을 사용하면 데이터가 redirect 요청 후에도 유지되지 않는데 RedirectAttributes를 사용하면 데이터를 일시적으로 전달 가능함

 

2. 주요 메서드

1. addAttribute(String key, Object value) - 쿼리 파라미터로 추가하는 방식, 새로고침해도 유지됨

// URL 쿼리 파라미터로 전달 -> redirect:/home/{name}?id=1
@PostMapping("/save")
public String saveUser(User user, RedirectAttributes redirectAttributes) {
    redirectAttributes.addAttribute("name", "Kim");
    redirectAttributes.addAttibute("id", user.getId());
    
    return "redirect:/home/{name}";
}

// RequestParam, PathVariable 으로 전달 받음
@GetMapping("/home/{name}")
public String homePage(@RequestParam("id") Long id, @PathVariable("name") String name, Model model) {
    model.addAttribute("message", "saved successfully!");
    return "success";
}

 

2. addFlashAttribute(String key, Object value) - 일회성 데이터 저장 (리다이렉트 후 자동 삭제), 세션에 임시 저장되므로 URL에 노출되지 않음

// Flash Attribute 추가 -> 일회성 데이터
@PostMapping("/save")
public String saveUser(User user, RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("message", "User saved successfully!");
    
    return "redirect:/success";
}

@GetMapping("/success")
public String successPage(Model model) {
    // URL에 노출되지 않고 FlashAttribute 값이 유지됨
    // success.html에서 ${message}로 접근 가능
    return "success";
}

 

3. 우선순위

redirectAttributes.addAttribute("key", "1");
redirectAttributes.addFlashAttribute("key", "2");

=> 결과 : 2 / addFlashAttribute가 우선적으로 사용된다
순서를 바꾸면 쿼리파라미터로 나오는것 같이 보이지만 결과는 똑같음

 

3. 용도

Flash Attribute는 일회성이기 때문에 주로 성공 메시지 전달, 알람등에 사용

ex) 성공 또는 실패 알람 한번만 호출되고 이후 새로고침시 다시 호출 안되도록 할때 사용