[egov] @Controller 메서드의 리턴타입

@Controller
해당 클래스가 Controller임을 나타내기 위한 어노테이션
@Controller 메소드의 리턴타입
리턴타입 | 설 명 |
ModelAndView | View 정보 및 모델 정보를 담고 있는 ModelAndView 객체, 커맨드 객체 및 @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 데이터, ModelMap(또는 Map) 타입의 파라미터 데이터가 View에 함께 전달된다. |
Model(or ModelMap) | 커맨드 객체와 @ModelAttribute이 적용된 메소드의 리턴 데이터가 Model 객체에 담겨 있다 |
Map | View 에 전달할 객체 정보를 담고 있는 Map을 리턴한다. 이때 뷰 이름은 요청 URL로 부터 결정된다. 커맨드 객체 및 @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 데이터가 View에 함께 전달된다. |
String | View 이름을 리턴한다. 커맨드 객체 및 @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 데이터, 그리고 ModelMap(또는 Map)타입의 파라미터 데이터가 뷰에 전달된다. |
void | 메소드가 직접 응답을 처리하는 경우 |
ModelAndView
1. 단순히 데이터 저장
@Controller
public class HelloController {
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView view = new ModelAndView();
view.setViewName("hello");
/*
view.setViewName = 뷰의 이름을 설정
View는 hello.jsp
*/
view.addObject("name", "Lim");
/*
view.addObject = 뷰에 전달할 데이터를 저장
${name} = Lim
*/
return view;
}
}
1-2. List로 데이터 저장
@RequestMapping("BoardList.do")
public ModelAndView list(
HttpServletRequest request,
HttpServletResponse response,
HttpSession session,
BoardVO bVO,
int bno,
ModelAndView mv
)
{
List<bVO> list = BoardService.SelectBoardList(bno);
mv.setViewName("board/BoardList");
/*
view.setViewName = 뷰의 이름을 설정
View는 BoardList.jsp
*/
mv.addObject("list", list);
/*
view.addObject = 뷰에 전달할 데이터를 저장
list
*/
return mv;
// http://localhost:8080/BoardList.do를 request한 경우, BoardList.jsp가 view가 된다.
}
mv.addObject("list", list)
서비스로직의 결과를 ModelAndView 객체에 담아서 클라이언트, 즉 jsp에서 그 결과를 사용할 수 있도록 한다.
mv에 값을 저장하는것은 map과 똑같이 키(key)와 값(value)로 구성이 되는데, BoardService.selectBoardList 메서드를 통해 얻어온 결과 list를 "list"라는 이름으로 저장하고 있다.
Map
@GetMapping("/test.do")
public Map<String, String> test() {
return data;
}
@GetMapping("test.do")
@ResponseBody
public HashMap<String, Object> example() {
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("name", "뜨루");
map.put("age", 28);
map.put("gender", "여자");
return HaspMap; // 자동으로 JSON타입으로 반환해서 전달한다.
}
String
@GetMapping("test.do")
public String test(Model model) {
model.addAttribute("data", data);
return "/test/data";
}
Model 안에 데이터를 key, value 값으로 담고, return 타입을 String 값으로 뷰의 이름을 지정해주면 뷰로 데이터가 전송되게 됩니다. 뷰에서는 해당 데이터의 key값을 객체 이름으로 하여 그 안에 데이터를 조회합니다.
@RequestMapping("test.do")
public String test() throws Exception {
return "redirect:/board/list.do";
}
redirect: 접두어를 붙이게 되는 경우 지정한 페이지로 리다이렉트가 되게 됩니다. 리다이렉트는 두 가지 방식으로 입력할 수 있습니다.
redirect: /api/test -> 현재 서블릿 컨텍스트에 대한 상대적인 경로로 리다이렉트를 하게 됩니다.
redirect: http//:localhost:8080/api/test -> 와 같이 전체 경로를 적는 경우 절대 경로로 리다이렉트를 하게 됩니다.
List
@RequestMapping("BoardList.do")
public List<BoardVO> list(bno){
return BoardService.SelectBoardList(bno);
}
@RequestMapping("BoardList.do")
public List<BoardVO> list(BoardVO bVO){
List<BoardVO> list = BoardService.SelectBoardList(bVO);
return list;
}
Void
@RequestMapping("test.do") //세부적인 url pattern
public void test(BoardVO bVO, HttpSession session) {
String userid = (String)session.getAttribute("userid");
bVO.setUserid(userid);
BoardService.selectBoardList(bVO);
// jsp 페이지로 가거나 데이터를 리턴하지 않음
// RequestToViewNameResolver를 통해 자동생성되는 View 이름이 사용된다.
// URL과 View 이름을 통일하여 사용해야한다.
}
출처 : https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:ptl:annotation-based_controller