Spring

스프링 컨트롤러 메서드의 반환타입(String, void, ModelAndView)

지지 2022. 2. 14. 01:16

컨트롤러 메서드의 반환 타입에는 여러 가지가 올 수 있는데, 오늘은 String, void, ModelAndview를 공부해보자.

 

1. String

º 반환타입이 String 이면 return 값으로는 jsp파일명을 적어준다.

º 나머지 경로와 확장자는 써줄 필요가 없다.

  - why? servlet-context.xml 파일에서 view의 경로를 지정해주는 부분이 있다.

  - 프로젝트 파일 - src - main - webapp - WEB-INF - spring - appServlet - servlet-context.xml

  - prefix(접두사)와, suffix(접미사)를 지정해주면 따로 경로와 확장자를 지정해주지 않아도 자동으로 붙게 된다.

    자동으로 설정이 되어있음. 원하는 대로 바꿔도 된다.

/WEB-INF/views/return값.jsp 의 경로로 view를 찾게됨

º 이 방법은 Model객체에 데이터를 담아서 view로 보내주는 방법이다.

  Model를 파라미터로 받고, model.addAttribute(key, value) 형식으로 써주면 된다.

@RequestMapping("/getYoilMVC")
public String main(int year, int month, int day, Model model) throws IOException {
		
	// 요일 계산
	char yoil = getYoil(year, month, day);
		
	// 계산한 결과를 model에 저장
	model.addAttribute("year", year);
	model.addAttribute("month", month);
	model.addAttribute("day", day);
	model.addAttribute("yoil", yoil);
		
	return "yoil"; // /WEB-INF/views/yoil.jsp를 이용해서 결과물을 보여주겠다 라는 뜻!
		// 근데 경로와 확장자 부분은 매번 똑같으니까 공통된 부분은 빼고 view이름만 적도록 하는 것!
		
}

 

2. void

º 반환 타입이 void면 리턴 값이 없게 되는데, 이땐 Mapping 된 URL에 의해 view의 이름이 결정된다.

  URL과 같은 이름의 jsp파일이 view가 되는 것이다.

º 이 때도 String일 때와 마찬가지로 Model에 데이터를 담아서 view에 보내게 된다.

 

3. ModelAndView

º ModelAndView는 이름에서도 알 수 있듯, Model과 View를 합친 것이다.

º 이땐, 매개변수에 Model객체를 사용하지 않고 메서드 안에서 ModelAndView를 만들어 줘야 한다.

º 메서드는 하나의 값만 반환할 수 있는데, 여기서는 Model과 View를 같이 반환해야 하기 때문에 두 개를 같이 담을 수

  있는 객체(ModelAndView)를 생성해주는 것이다.

º 사용법은 Model과 비슷하지만 return값이 ModelAndView가 된다. (요즘 잘 쓰지 않음)

@RequestMapping("/getYoilMVC")
public String main(int year, int month, int day) throws IOException {
	ModelAndView mv = new ModelAndView();

	//결과 저장
	mv.addObject("year", year);
	mv.addObject("month", month);
	mv.addObject("day", day);
	mv.addObject("yoil", yoil);

	//결과를 보여줄 view를 지정
	mv.setViewName("yoil"); //String일 때와 마찬가지로 view이름만 적어준다.

	//ModelAndView 반환
	return mv;
}