[Spring] RedirectAttributes

조태산·2023년 8월 24일
0

RedirectAttributes

-> 리다이렉션 시, 컨트롤러 메서드에서 다른 메서드로 Attributes를 전달하는데 사용되는 인터페이스
  • ex) 주문이 완료된 후, 주문 상세페이지로 리다이렉팅 / 생성된 주문번호를 페이지로 전달가능

@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";
    }
}

addAttribute와 addflashAttribute 차이

두가지 메서드 전부 redirectAttributes를 이용하여 데이터를 넘길 수 있다.
  • addAttribute() 는 브라우저의 주소창에 보이게 URL 에 추가하여 정보를 넘긴다.

    1. 주소창에 보이는 만큼 짧은 정보, 이용자에게 노출되어도 상관 없는 정보를 넘기는데에 주로 사용한다.

    2. 쿼리 파라미터가 있는 URL 에 접근하는 한 여러 요청에 사용이 가능하다.

    3. /targetURL?key=value 형식으로 전달된다.

  • addFlashAttribute() 는 세션에 저장되고 오직 다음 요청에서만 접근 가능하다.

    1. 임시로 저장하는 방식이다.

    2. 세션에 저장되어 사용된 뒤에 자동으로 삭제된다.

    3. 검증 결과, 성공 실패 여부 메세지와 같이 임시로 사용되는 데이터를 다루는데 적합하다.

    4. 또 주소 창에 표기되지 않으므로 addAttribute() 보다 폐쇄적이다.

RedirectAttributes로 넘긴 데이터 접근하기

  • addAttribute() : url로 넘어오니 @RequestParam 이용
  • addFlashAttribute() : @ModelAttribute 어노테이션 사용
    -> 그냥 Model 오브젝트를 파라미터에서 사용하고, model.getAttribute()를 사용해도 무방
@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

profile
만년개발초보

0개의 댓글