Spring @RequestMapping과 이에 대한 속성

@RequestMapping

@RequestMapping은 Spring Framework에서 HTTP 요청과 컨트롤러 메서드를 매핑하기 위해 사용되는 어노테이션입니다. Controller 클래스 레벨 또는 메서드 레벨에서 사용할 수 있으며, URL과 메서드를 연결합니다.

@Controller
@RequestMapping("/accounts")
public class AccountController{

	@RequestMapping("/list")
    public String accountList(){
 		return "account_list";   
    }
}

결과로 "account_list" 뷰를 반환합니다.

 

@Controller
@RequestMapping("/accounts")
public class AccountController{

	@RequestMapping(value = "/signup", method = RequestMethod.POST)
    public String insertAccount(){
 		return "account_signup";   
    }
}

insertAccount() 메서드를 POST 요청과 매핑하였습니다. 즉 코드는 `/accounts/signup` POST 요청이 발생하면 insertAccount() 메서드가 호출됩니다.

 


@RequestMapping 지정 가능 속성

  • value: 요청 경로(또는 패턴) 지정합니다.
  • path: value 속성의 별명을 지정합니다.
  • method: HTTP 메소드 값(GET,POST,PUT 등)을 지정합니다.
  • params: 요청 URL의 쿼리 파라미터를 기반으로 매핑을 설정하는 데 사용되는 속성입니다. 
  • headers: 헤더 유무나 값을 지정합니다.
  • consumes: 요청이 소비하는 미디어 타입을 지정합니다. Content-Type 헤더
  • produces: 응답이 생성하는 미디어 타입을 지정합니다. Accept 헤더
  • name: 매핑 정보에 임의의 이름을 지정합니다.

 

 

요청 경로 여러 개 사용

@RequestMapping({"/demo/account", "/demo2/account"})

 

 

path 변수 사용

@Controller
@RequestMapping("/accounts")
public class AccountController{

	@RequestMapping("{accountId}")
    public String getAccountById(@PathVariable int accountId){
    	// ...
    	return "account";
    }
}
  • 경로: /account/{accountId} 
  • @PathVariable: URL에서 경로 변수 값을 가져오기 위한 어노테이션
  • /account/{accountId:[a-z0-9-]{36}} 와 같이 정규표현식도 지정 가능

 

 

params - 파라미터 기반 매핑

@RequestMapping(value = "/users", params = "role=admin")
public String getAdminUsers() {
    // 관리자 권한을 가진 사용자 목록을 조회하고 처리하는 로직
    return "adminUsers";
}

@RequestMapping(value = "/users", params = {"status=active", "role!=admin"})
public String getActiveNonAdminUsers() {
    // 활성 상태이면서 관리자가 아닌 사용자 목록을 조회하고 처리하는 로직
    return "activeNonAdminUsers";
}

 

 

요청 헤더 사용: HTTP 헤더

@RequestMapping(value="/view", headers="content-type=text/*")
@ResponseBody
...
  • '헤더이름 = 값' 형식을 사용
  • 위 코드는 헤더의 content-type이 text/html, text/plain 등으로 되어 있는 경우에만 매핑

 

 

Content-Type 헤더 사용

@RequestMapping(consumes="application/json")
@ResponseBody
public Account postAccount(@Validated @RequestBody Account account){
  • 요청 본문의 미디어 타입을 지정
  • 요청 본문에 JSON(미디어 타입: application/json)을 지정해서 접근하면 postAccount 메소드가 실행

 

 

Accept 헤더 사용

@RequestMapping(path="regist", produces="application/json")
@ResponseBody
public Account postAccount(@Validated @RequestBody Account account){
  • 응답 본문의 미디어 타입을 지정한다.
  • 응답 본문으로 JSON(미디어 타입: application/json)을 받을 수 있는 클라이언트가 접근하면 postAccount 메소드가 실행