본문 바로가기

spring

@PathVariable 사용한 url 매핑

Spring 3부터 RESTful URI처리를 위해 @RequestMapping이 URI Template을 지원하도록 기능을 추가하였고, URI Template에 포함된 변수 값을 추출할 수 있도록 @PathVariable이라는 새로운 Annotation을 추가했다.

다음은 @PathVariable을 사용한 예이다.

@RequestMapping(value = "/movies/{movieId}/edit", method = RequestMethod.GET)
public String get(@PathVariable String movieId, Model model)
      throws Exception {
    Movie movie = this.movieService.get(movieId);
    // 중략
    return "restwebViewMovie";
}
'/movies/MV-00001'와 같은 URI로 요청이 들어왔을 때, 위의 get 메소드가 처리하게 되고 'MV-00001' 값은 'movieId' 입력 Argument에 바인딩된다.

아래와 같이 변수명을 지정하여 사용하거나 여러개의 변수를 사용할 수도 있다.

@RequestMapping(value = "/movies/{movie}/posters/{poster}", method = RequestMethod.GET)
public String get(@PathVariable("movie") String movieId, @PathVariable("poster") String posterId, Model model)
      throws Exception {
    Movie movie = this.movieService.get(movieId);
    // 중략
    return "restwebViewMovie";
}

'/movies/*/posters/{posterId}'와 같이 Ant-style의 경로에도 사용할 수 있고, URI Template의 변수를 String이 아닌 다른 타입의 입력 Argument로도 바인딩 가능하다.

@InitBinder
public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}

@RequestMapping("/plans/{date}")
public void get(@PathVariable Date date) {
    // 중략
}
예로 '/plans/2010-09-05' URI로 들어온 요청은 위의 메소드가 처리할 것이고, '2010-09-05'는 date 입력 Argument에 Date 타입으로 바인딩 될 것이다.

--------------------------------------------------------------------------------------------

@ResquestMapping 으로 url 매핑시 동적인 매핑에 사용하면 유용하게 쓰일것 같다.

@ResquestMapping시 경로에 /conf/{path} 사용한 뒤

@PathVariable String path로 메소드 파라미터로 받으면 알아서 해당 url로 매핑이 된다.