본문 바로가기

Spring Boot/controller

redirectAttribute / redircet 할 때 어떤 데이터도 같이 보내고 싶다면

 

redirect의 구조는

처음에 sub13을 redirect 하는  /main16/sub12를 요청을 하면 바로 sub13으로 넘어가는게 아닌

server를 한번 걸쳐서 302 응답코드를 받고 

다시 client에서 /main16/sub13에 대한 request를 요청한다.

 

그래서 /main16/sub12 의 값을 redirect 되는 sub13에 사용하고 싶다면

 

방법은 크게 세가지로 나뉜다


1. 쿼리스트링에 담아서 보내기

@GetMapping("sub12")
public String method12(String email){
    
    return "redirect:/main16/sub13?p=" + email;
}

2. HttpSession 객체 사용(비권장)

@GetMapping("sub12")
public String method12(String name, HttpSession session){
	
    // HttpSession 객체에 값 넣어주기
    session.setAttribute("name", name);
    return "redirect:/main16/sub13";
}

@GetMapping("sub13")
    public void method11(HttpSession session, Model model){
    	
        // sub12 session에서 보낸 setAttribute 데이터를 받는다
        Object name = session.getAttribute("name"); 
        
         // view에서 사용하려면 model에 넣어서 사용
        model.addAttribute("name", name); 
        
    }

3. RedirectAttributes 객체 사용 (권장)

 

addFlashAttribute() 메소드는 세션에 잠깐 데이터를 넣었다가

redirect 경로 Model 객체에 넣어주고 사라짐

HttpSession 객체 대신 RedirectAttributes 사용 권장

 

addFlashAttribute() - redirect 경로 도착지의 Model에 붙음

@GetMapping("sub12")
public String method14(String[]foodList, RedirectAttributes reAttr){
    
    // HttpSession 객체 대신 RedirectAttributes 객체 사용해서 데이터 넣기
    reAttr.addFlashAttribute("foodList", foodList);
    
    return "redirect:/main16/sub13";
}

@GetMapping("sub13")
public void method15(Model model){
	
    // sub12의 addFlashAttribute값 가져오고
    Object foodList = model.getAttribute("foodList");
    
    // sub13 model에 넣어서 사용
    model.addAttribute("foodList", foodList);
    
    // 템플릿 엔진에서 사용하려면 굳이 model.get / set 안해도 
    // 바로 템플릿 엔진에서 데이터 사용 가능

}

addFlashAttribute 동작 순서 -> session에 잠깐 담겼다가 -> redirect경로의 Model 객체에 담긴다

템플릿 엔진에서 바로 사용하려면 굳이 메소드안에 model.getAttribute, setAttribute 안해도됨


addAttribute() - redirect 경로 도착지의 쿼리스트링에 붙음

@GetMapping("sub16")
public String method16(RedirectAttributes rttr){
    rttr.addAttribute("attr1", "쿼리스트링에 붙음");
    return "redirect:/main16/sub17";
}

 

반응형

'Spring Boot > controller' 카테고리의 다른 글

redirect  (0) 2023.09.27