본문 바로가기

프로그래밍/스프링[Spring]

[스프링] 자바 redirect 시 파라미터 전달하기



redirect 시 VO도 같이 전달을 해보도록 하겠습니다.

 

Model 에서 쓰는 방법과 유사합니다

 

- addAttribute :GET 방식이며 페이지를 새로고침 한다 해도 값이 유지됨

- addFlashAttribute: POST 방식이며 이름처럼 일회성 데이터라 새로고침 하면 값이 사라짐

 

간단하게 addAttribute, addFlashAttribute 차이점을 알아보겠습니다.

 

addAttribute 사용법 입니다.

 

각 파라미터를 지정하여 보낼 수 있습니다.

 

    
    @RequestMapping(value = "redirect.do")
    public String redirect(UserVO userVO, RedirectAttributes reAttr) {

        userVO.setEmail("테스트");
        userVO.setName("홍길동");
        
        reAttr.addAttribute("email",userVO.getEmail());
        reAttr.addAttribute("name",userVO.getName());
        
        return "redirect:/redirect/test.do";
    }
    
    //리다이렉트
    @RequestMapping(value = "redirect/test.do")
    public String test(UserVO userVO) {
               
        System.out.println(userVO.getEmail());
        System.out.println(userVO.getName());
       
        return "/main/main";
    }

다음과 같이 주소를 요청하면 

 

 

GET 방식으로 주소에 파라미터가 붙어서 전송이 됩니다.

 

 

다음과 같이 test에 제대로 도착합니다.

VO를 보내는 방법입니다.

 

addFlashAttribute 를 사용하여 전송합니다.

    @RequestMapping(value = "redirect.do")
    public String redirect(UserVO userVO, RedirectAttributes reAttr) {

        userVO.setEmail("테스트");
        userVO.setName("홍길동");
        
        reAttr.addFlashAttribute("userVO",userVO);
        
        return "redirect:/redirect/test.do";
    }
    
    //리다이렉트
    @RequestMapping(value = "redirect/test.do")
    public String test(HttpServletRequest request, UserVO userVO) {
        
        Map<String, ?> flashMap =RequestContextUtils.getInputFlashMap(request);
        if(flashMap!=null) {
            userVO =(UserVO)flashMap.get("userVO");
  
        }
        
        System.out.println(userVO.getEmail());
        System.out.println(userVO.getName());
        
        return "/main/main";
    }

addFlashAttribute 를 사용하여 다음과 같이 주소를 요청합니다

다음과 같이 redirect 된 url만 표시가 됩니다.

addAttribute 는 GET 방식으로 전송하는 형태라 파라미터가 붙습니다.

addFlashAttribute 는 POST 방식으로 Flash라 한번만 사용이 가능하며 새로고침시 데이터가 사라집니다.

 

용도에 맞게 사용하는게 좋아 보입니다.

 

이상으로 마치겠습니다

 

감사합니다.