본문 바로가기
Web Development/Spring

[Spring] FlashMap 을 활용하여 Controller 간 값 전달

by graycode 2022. 6. 29.

FlashMap 은 controller 간 redirect 시 지정한 파라미터를 전달하기 위해 

Spring 3.1 버전부터 고안된 자료구조이다.

 

이는 값 전달 시 url 에 해당 파라미터를 노출시키지 않고,

휘발성을 지니고 있어 사용 후에 Spring 에서 자동으로 값을 지워준다는 이점이 있다.

 

사용법은 일반 Map 자료구조와 유사하며 그 예시는 아래와 같다.

@RequestMapping("send")
public String send(@RequestParam Map<String, String> map, HttpServletRequest request) throws Exception {

    FlashMap fmOut = RequestContextUtils.getOutputFlashMap(request);

    int page = 1;
    if (request.getParameter("page") != null)
        page = Integer.parseInt(request.getParameter("page"));

    fmOut.put("map", map);
    fmOut.put("page", page);

    return "redirect:receive";
}

@RequestParam 으로 전달받은 Map 객체와 page 값을 FlashMap 객체에 key 와 value 값으로 저장해 전달한다.

 

@SuppressWarnings("unchecked")
@RequestMapping("receive")
public String receive(Model model, HttpServletRequest request) throws Exception {

    Map<String, ?> fmIn = RequestContextUtils.getInputFlashMap(request);

    Map<String, Object> map = new HashMap<>();
    int page = 1;
    if (fmIn != null) {
        map = (Map<String, Object>) fmIn.get("map");
        page = (Integer) fmIn.get("page");
    }

    model.addAttribute("map", map);
    model.addAttribute("page", page);

    return "food/food_async";
}

이렇게 전달받은 파라미터 값들을 위와 같이 Map 객체에 저장하고,

key 값으로 데이터를 꺼내 변수에 대입하거나 model 객체를 통해 view 단 에 넘길 수 있다.

 

map = (Map<String, Object>) fmIn.get("map");

추가로 위의 코드에서 형변환 시 타입 판별의 모호함으로 Type safety 경고가 발생하는데,

이 경우 @SuppressWarnings("unchecked") 로 억제가 가능하다.

댓글