스프링 프레임워크[Spring Framework] @PathVariable 어노텐션

반응형

@PathVariable Annotation을 이용한 URI 템플릿

RESTful 서비스가 유행하면서 URI를 다음과 같이 REST 방식으로 구성하는 경우가 늘어나고 있다.

기존에는 http://로컬호스트주소/users/userinfo?id=madvirus와 같이 파라미터를 이용해서 아이디나 이름을 전달받았다면, 이제는 URI에 아이디나 이름 등이 포함되도록 URL을 구성하고 있다.

SPRING 3버전에 추가된 기능 중 필자가 가장 반기는 기능 중의 하나가 URI 템플릿이며, 이 URI 템플릿을 이용하면 REST 방식의 URL 매칭을 쉽게 처리할 수 있다. URI 템플릿을 사용하는 방법은 매우 간단하며, 다음과 같이 두 가지만 추가로 작업해주면 된다.

  • @RequestMapping Annotation의 값으로 {템플릿변수}를 사용한다.
  • @PathVariable Annotation을 이용해서 {템플릿변수}와 동일한 이름을 갖는 파라미터를 추가한다.

@RequestMapping Annotation은 이름이 userId와 characterId인 변수를 포함하고 있다. 이들 변수는 @PathVariable Annotation이 적용된 동일한 이름을 갖는 파라미터에 매칭된다. 따라서 요청 URI가 "/game/users/madvirus/character/1"이면, characterInfo() 메서드의 userId 파라미터와 characterId 파라미터의 값은 각각 "madvirus"와 "1"이 된다.

만약, 파라미터 이름과 URI 템플릿의 변수 이름이 동일하지 않다면, 다음과 같이 @PathVariable Annotation에 매칭될 템플릿 변수 이름을 지정해 주면 된다.

public String characterInfo(@PathVariable String userId, @PathVariable int characterId, ModelMap model) {  
...  
}

@RequestMapping Annotation을 Class와 메서드에 함께 적용할 경우, 메서드에 적용한 @RequestMapping Annotation의 값은 Class에 적용한 @RequestMapping Annotation의 값을 기본 경로로 사용하게 된다. 위에 Code는 사용 예이다.

위 Code에서 characterInfo() 메서드에 적용된 @RequestMapping Annotation의 값은 "/characters/{characterId}"인데, 실제로 매칭되는 값은 Class에 적용된 @RequestMapping Annotation의 값을 포함한 "/game/users/{userId}/characters/{chracterId}"가 된다.

출력결과:

반응형