본문 바로가기
☕Java/Spring

[20210910] Web MVC RequestMapping 예제

by 캔 2021. 9. 10.

1. 가장 기본이 되는 예제

@RequestMapping("/example")
public String example() {
	return "example";
}

위 예제는 컨텍스트 경로 + "/example"이라는 URL로 요청이 들어왔을 때 example을 반환하는 메서드이다. 메서드가 실행되면 스프링에 설정된 뷰 리졸버가 "example" 앞뒤에 각각 접두사(prefix)와 접미사(suffix)를 붙인 경로에서 뷰 파일을 찾는다. 이 예제 작성 시에는 접두어가 "/views/", 접미사가 ".jsp"이므로 "/views/example.jsp"에서 뷰 파일을 찾는다.

 

 

2. 모델 객체를 받는 예제

@RequestMapping("/example2")
public String example2(Model model) {
	List<String> list = new ArrayList<String>();
    list.add("구겔호프");
    list.add("딸기잼 도우넛");
    list.add("마들렌");
    model.addAttribute("model1", list);
    return "example2";
}

1번 예제와 마찬가지 방식으로 컨텍스트 경로 + "/example2"라는 URL로 요청이 들어오면 example2 메서드가 실행되는데 이번엔 Model 객체를 매개변수로 받아서 메서드 내에서 model 객체를 사용할 수 있게 해 준다. 위 예제에서는 "구겔 호프", "딸기잼 도우넛", "마들렌"을 리스트에 담고 그 리스트를 모델 객체에 추가하는 작업을 수행 후 문자열 "example2"를 리턴한다. 문자열을 리턴했으니 1번 예제와 마찬가지 방식으로 반환 문자열에 해당하는 뷰 이름을 가진 뷰 파일을 찾게 된다.

 

3. 모델 속성에 저장할 객체와 추정된 뷰 이름으로 뷰를 찾는 예제

@ModelAttribute("model1")
@RequestMapping("/example3")
public List<String> example3() {
	List<String> list = new ArrayList<String>();
    list.add("구겔호프");
    list.add("딸기잼 도우넛");
    list.add("마들렌");
    return list;
}

2번 예제의 변형인데, @ModelAttribute 애너테이션을 사용하면 메서드 내에서 모델 객체에 리스트를 추가하지 않고 리스트 자체를 모델 객체에 저장할 수 있다. 이때 뷰 리졸버가 찾을 뷰 이름은 매핑 값인 "/example3"과 동일하게 "example3"를 반환한 것으로 간주하여 "/views/example3.jsp" 파일을 찾게 된다.

 

4. 요청 매개변수를 받아오는 예제

@RequestMapping("/example4")
public String example4(@RequestParam int boardno, Model model) {
	model.addAttribute("model2", boardno);
	return "example4";
}

GET 방식으로 요청이 들어올 경우 URL에 매개변수를 줄 수 있다. 이때 이 매개변수를 메서드에서 사용하려면 메서드의 인수에 이 매개 변수들을 입력하고 @RequestParam 애너테이션을 붙여주어야 한다. 위에서는 boardno 앞에 @RequestParam을 붙였으므로 URL이 컨텍스트 경로 + "/example?boardno=3"과 같이 boardno라는 매개변수가 있는 URL에서 요청을 받으며 int boardno = 3;을 메서드 내에 선언한 것과 같다. "example4"를 반환하여 뷰 파일을 찾는 것은 동일하다.

 

@RequestMapping(value="/example5", method=RequestMethod.POST)
public String example4(@RequestBody String cust_id, Model model, HttpServletResponse response) {
	response.setCharacterEncoding("UTF-8");
    model.addAttribute("model3", cust_id);
    return "example5";
}

지금까지는 모두 method를 지정하지 않았다. 따라서 @RequestMapping(value="매핑값", method={RequestMapping.GET, RequestMapping.POST)라고 쓴 것과 같았다. 이번에는 POST 방식으로 요청이 들어올 경우이다. @RequestBody 애너테이션은 요청 본문에서 변수를 가져올 수 있게 해 준다.