Interceptor에서 RedirectAttributes 이용하기
개발언어/Java, Spring 2017. 12. 12. 17:55
Spring에선 아래와 같은 방법으로 RedirectAttributes를 이용해 컨트롤러에서 컨트롤러로 파라미터를 전송가능합니다.
FlashAttribute는 1회성이기 때문에 ModelAndView로 addObject해서 View까지 넘기는 모습입니다.
// RedirectAttributes로 파라미터를 넘기면서 요청하는 테스트 컨트롤러 @RequestMapping(value="/test/call.do") public ModelAndView callTest(RedirectAttributes redirectAttributes) throws Exception{ ModelAndView mv = new ModelAndView("redirect:/test/receive.do"); redirectAttributes.addFlashAttribute("param1", "TEST1"); redirectAttributes.addFlashAttribute("param2", "TEST2"); redirectAttributes.addFlashAttribute("param3", "TEST3"); return mv; } @RequestMapping(value="/test/receive.do") public ModelAndView receiveTest(HttpServletRequest request) throws Exception{ ModelAndView mv = new ModelAndView("/test/view"); Map<String, Object> inputFlashMap = (Map<String,Object>) RequestContextUtils.getInputFlashMap(request); if(inputFlashMap!=null && inputFlashMap.isEmpty()==false){ Iterator<Entry<String,Object>> iterator = inputFlashMap.entrySet().iterator(); Entry<String,Object) entry = null; while(iterator.hasNext()){ entry=iterator.next(); mv.addObject(entry.getKey(), entry.getValue()); } } return mv; }
그러나... 하다보니 Interceptor에서 RedirectAttributes를 사용할 일이 생겼습니다.
통상 인터셉터는 preHandle Override 하는 것이다 보니 위 callTest처럼 파라미터로 "RedirectAttributes redirectAttributes"를 넣을 수가 없습니다.
그래서 찾아낸 방법...
Interceptor에 FlashMap과 FlashMapManager 객체를 만들어 Request에 생성하는 방법입니다.
FlashMap flashMap = new FlashMap(); flashMap.put("msg", MessageUtils.getMessage("login.invalidSession")); FlashMapManager flashMapManager = RequestContextUtils.getFlashMapManager(request); flashMapManager.saveOutputFlashMap(flashMap, request, response);
'개발언어 > Java, Spring' 카테고리의 다른 글
JavaMail을 이용한 메일 전송 (javax.mail) (0) | 2018.02.28 |
---|---|
Java Library: Lombok (자동 getter&setter 생성) (0) | 2017.12.21 |
SQL-ERROR-CODE (0) | 2017.12.12 |
[Spring] MesageSource 설정하기 - 공통 메시지 처리 (with 다국어처리) (1) | 2017.11.27 |
[설정] 오류 공통 페이지 설정 (0) | 2017.11.26 |