스프링에서 redirect를 사용할때 파라미터 값을 넘겨야 할 경우가 있다.
예를들어
xxx.do?id=mm&name=lee
이렇게 하면 값은 가지만...
url에 데이터값이 다 노출되기 때문에 먼가 꺼림직하다.
그래서 데이터를 숨기면서 다른 controller로 보낼 방법을 검색하였다.
방법 1.
RedirectAttributes 사용하기
인터페이스는 org.springframework.web.servlet.mvc.support.RedirectAttributes
값 전달하기
@RequestMapping(value="/test.do",method=RequestMethod.POST)
public String test(HttpServletRequest req,@RequestParam Map<string,object>params,
ModelMap modelMap,RedirectAttributes redirectAttributes)throws Exception{
params.put("result", result);
redirectAttributes.addFlashAttribute("params", params); //전달할 값
return "redirect:test.do";
값 받기
Map<string, ?> flashMap = RequestContextUtils.getInputFlashMap(req);
if(flashMap !=null) {
// flashMap.get("params") 으로 값 받아서 사용
params=(Map<string, object>) flashMap.get("params");
}
방법 2.
FlashMap 사용하기
인터페이스는 org.springframework.web.servlet.FlashMap
값 전달하기
//FlashMap에 전달할 값을 저장한다.
FlashMap fm = RequestContextUtils.getOutputFlashMap(req);
fm.put("test", "test");
return "redirect:/test.do";
//여기서 redirect url은 직접 기재하는것을 추천합니다.
//변수명으로 호출했을때 안되는 경우를 접했기 때문에...
값 받기
//FlashMap에 저장되어 전달된 값을 가져온다.
Map<String, ?> flashMap = RequestContextUtils.getInputFlashMap(req);
if(flashMap !=null) {
modelMap.put("test", (String)flashMap.get("test"));
}