본문 바로가기

Tech/Spring

[Spring] Controller Retrun Type 종류

Controller 는 비즈니스 로직 처리후 ViewResolver를 통해 View로 데이터를 전달
컨트롤러가 뷰 오브젝트를 직접 리턴 할 수도있지만 논리적인 이름을 리턴하여 ViewResolver가 이를 이용해 뷰 오브젝트 생성
컨트롤러는 최종적으로 모델과 뷰를 DispatcherServlet에게 돌려줘야 함

1. 리턴타입 ModelAndView 이용

  • 주석과 같은 방법도 유효
@RequestMapping("/index") 
public ModelAndView index(HttpServletRequest request) throws Exception { 
    String name = request.getParameter("name"); 

    //return new ModelAndView("index.jsp").addObject("name", name); 

    Map<String, Object> map = new HashMap<String, Object>(); 
    map.put("name", name); 
    return new ModelAndView("index.jsp", map); 
}
  • Model 타입의 파라미터를 이용한다면 뷰에 전달되는 Model에 자동적으로 추가가 됨.
@RequestMapping("/index") 
public ModelAndView index(@RequestParam String info, Model model) throws Exception { 
    model.addAttribute("info", info); 
    return new ModelAndView("index"); 
}

2. 리턴타입 String 이용

  • 컨트롤러의 메서드 리턴타입이 String이면 리턴 값이 뷰 이름 으로 사용됨
@RequestMapping("/index") 
public String index(...) throws Exception { 
    return "index"; 
}

3. 리턴타입 void 이용

  • 컨트롤러의 메서드 리턴타입을 void로 설정가능하다
  • URL에 따라 view이름이 결정됨
@RequestMapping("index") 
    public void index(...) throws Exception { 
    .... 
}

이 경우 url index 이름으로 뷰를 만들어 줌

4. 리턴타입 View 이용

@RequestMapping("index") 
public View index(...) { 
    return new InternalResourceView("/WEB-INF/index/index.jsp"); 
}

5. @ResponseBody 이용

  • @ResponseBody가 컨트롤러의 메서드 레벨에 부여되면 바로 HTTP 응답 메세지 본문으로 전환
@RequestMapping("/index") 
@ResponseBody 
public String index() { 
    return "...."; 
}

@ResponseBody가 붙었으므로 HttpServletResponse의 출력 스트림에 return 값을 넣어줌

'Tech > Spring' 카테고리의 다른 글

[Spring] ViewResolver  (0) 2019.04.14
[Spring] Controller Retrun Type 종류  (0) 2019.04.14
[Spring] Controller  (0) 2019.04.14
[Spring] HandlerMapping  (0) 2019.04.14