web developer

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

Framework/Egovframework [spring]

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

trueman 2022. 2. 21. 17:17
728x90
728x90

 

@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

728x90
728x90