본문 바로가기
Programming/Spring

PathVariable 어노테이션을 이용한 URI 템플릿

by 막이 2012. 10. 11.

즉.xxxx/xxxx/info?user=id 형태의 url이 있다면
-->
xxxx/xxxx/info/user/id .. 뭐 이런것 처럼 파라미터가 uri에 포함되도록 하는 형태란다.

이걸 스프링3 에서 흉내?? 낼수 있는데 URI 템플릿 기능이란다.

1. 설정방법
방법은
@RequestMapping 어노테이션값으로 { 템플릿변수 } 를 사용한다.
@PathVariable 어노테이션을 이용해서 { 템플릿 변수 } 와 동일한 이름을 갖는 파라미터를 추가한다.

@Controller
public class CharacterInfoController {
@RequestMapping( "/game/users/{userId}/characters/{characterId}" )
public String characterInfo(@PathVariable String userId, @PathVariable int characterId,ModelMap model) {
model.addAttribute("userId",userId);
model.addAttribute("characterId",characterId);
....
}

RequestMapping 어노테이션에 변수를 포함하고 있다.
이들변수는 @PathVariable 어노테이션이 적용된 동일한 이름을 갖는 파라미터에 매칭된다.



/game/users/ezsnotes/characters/sorcerer

하면 userId / characterId에 ezsnotes , sorcerer 가 들어간다.

만약 @PathVariable 어노테이션에 값을 주면 변수이름을 동일하게 하지 않고 지정할 수 있게 된다.


2. 추가 설정방법
@Controller
@RequestMapping("/game/users/{userId}")
public class CharacterInfoController {

@RequestMapping("/characters/{characterId}")
public String characterInfo(@PathVariable String userId,
@PathVariable int characterId, ModelMap model) {
model.addAttribute("userId", userId);
model.addAttribute("characterId", characterId);
return "game/character/info";
}
}

위의 코드처럼 클래스와 메소드에 각각 RequestMapping을 걸어놓게 되면?
메소드에 적용한 @RequestMapping 어노테이션의 값은 클래스에 적용한 @RequestMapping 어노테이션의 값을 기본경로로 쓰게 된다.

메소드에 적용된 어노테이션의 값은 /characters/{characterId} 인데 실제 매칭되는 값은 클래스에 적용된 어노테이션의 값을 포함한
/game/users/{userId}/characters/{characterId} 가 된다.

 

'Programming > Spring' 카테고리의 다른 글

[Spring] sitemesh 설정하기  (0) 2014.03.12
Spring3.0 기본 셋팅  (0) 2013.01.16
Mybatis Mapper  (0) 2012.09.28
Spring Annotation - @Component, @Service, @Repository, @Controller  (0) 2012.09.28
@Qualifier  (0) 2012.09.28