프로그래밍/Spring & Spring boot

[Spring / 스프링] @RequestMapping , @GetMapping , @PostMapping

pupu91 2022. 9. 6. 16:39
반응형

 

DispatcherServlet은 웹 요청을 받는 즉시 @Controller가 달린 컨트롤러 클래스에 처리를 위임한다. 그 과정은 컨트롤러 클래스의 핸들러 메소드(컨트롤러에 정의 된 메소드)에 선언 된 다양한 @RequestMapping 설정 내용에 따른다

 

 


 

 @RequestMapping 

   : 요청에 대해 특정 메서드와 매핑하기 위해 사용하는 어노테이션

     메소드와 클래스레벨에 사용할 수 있음

     보통 value와 method 값을 설정함

     value 는 요청받을 url 설정, method는 요청 방식 정의

  @RequestMapping(value="경로", method="요청 방식")

 

 


 

1) value 만 설정

: method 방식을 지정하지 않으면 get/post 요청 둘 다 처리함.

@Controller
public class MethodMappingTestController {
	
    @RequestMapping("/menu/regist")
	public String registMenu(Model model){
    
    model.addAttribute("message", "신규 메뉴 등록용 핸들러 메소드 호출함");
		
		return "mappingResult";
	}
}

 

 

 

2) value와 method 설정

: 정의 된 메소드가 없는데 호출하는 경우 405 - 허용하지 않는 메소드 오류 발생

@Controller
public class MethodMappingTestController {

@RequestMapping(value = "/menu/modify", method = RequestMethod.GET)
public String modifyMenu(Model model) {
		
	model.addAttribute("message", "GET 방식의 메뉴 수정용 핸들러 메소드 호출함");
		
	return "mappingResult";		
}

 

 

 

 

3)  return 타입을 void로 하는 경우 

 :  viewResolver는 요청 주소 자체를  view name으로 해석함.

@Controller
public class MainController {
	@RequestMapping("/main")
		public void showMain() {}
}

 

 

반응형

 

 

4) 클래스 레벨에 @RequestMapping 어노테이션 사용

: 클래스 레벨에 @RequestMapping를 사용하여 공통 URL을 설정할 수 있음

@Controller
@RequestMapping("/order/*") 앞에 오는 url 고정 시키기
public class ClassMappingTestController {
	
    @GetMapping("/regist")
	public String registOrder(Model model) {
		
		model.addAttribute("message", "GET 방식의 주문 등록용 핸들러 메소드 호출함");
		
		return "mappingResult";
	}
    
    여러 메소드 공통 처리 가능함
    @RequestMapping(value= {"modify", "delete"}, method = RequestMethod.POST)
	public String modifyAndDelete(Model model) {
		
		model.addAttribute("message", "POST 방식의 주문 정보 수정과 주문 정보 삭제 공통 처리용 핸들러 메소드 호출함");
		
		return "mappingResult";
	}

 

 

 


 

@GetMapping와 @PostMapping

: 요청 메소드별 전용 어노테이션(핸들러 메소드보다 간결함)

 


 

@GetMapping

: 요청 메소드가 GET 방식일 때 사용

@Controller
public class MethodMappingTestController {
	
    @GetMapping("/menu/delete")
	public String getDeleteMenu(Model model) {
		
		model.addAttribute("message", "GET 방식의 메뉴 삭제용 핸들러 메소드 호출함");
		
		return "mappingResult";
	}
}

 

 

 

 

@PostMapping

: 요청 메소드가 POST 방식일 때 사용

@Controller
public class MethodMappingTestController {
	
    @PostMapping("/menu/delete")
	public String postDeletMenu(Model model) {
		
	model.addAttribute("message", "POST 방식의 메뉴 삭제용 핸들러 메소드 호출함");
		
	return "mappingResult";
}

 

 

 

 


 

 

 

 

 

반응형