'2013/03'에 해당되는 글 1

  1. 2013.03.29 Spring 3.2 에서 @MatrixVariable 사용하기
IT 이야기 | Posted by 민창 2013.03.29 14:10

Spring 3.2 에서 @MatrixVariable 사용하기

RESTful API 를 디자인하는 과정에서 특정 필드의 조건을 만족하는 데이터(리소스)를 조회하는 API 를 만들어야 할 때가 있다. 리소스의 계층적인 구조는 / 를 이용해서 URI 로 표현하기 쉽겠지만 필드들의 값을 만족하는 부분을 어떻게 URI 에 표현할 수 있을까 하는 고민을 하게 된다. 이를 위해 사용할 수 있는 방법 중 하나가 바로 Matrix URI 이다. 


http://www.w3.org/DesignIssues/MatrixURIs.html


Maxrix URI 는 파라미터로 넘길 key, value 쌍을 ; ( 세미콜론) 으로 구분하여 명시하도록 제안한다. 


Query parameters : http://example.com/apples?order=random&color=blue

Matrix parameters : http://example.com/apples;order=random;color=blue


프로그래머 입장에서는 위와 같은 matrix 방식을 사용할 시 해당 부분을 파싱하여 ; 기준으로 나누고 key , value 쌍을 구분해내는 등의 작업을 해야 하는데 여간 귀찮은 것이 아니다. 

이를 위해 Spring 3.2 버전에서는 기존 @RequestMapping 과 함께 사용할 수 있는 편리한 어노테이션인 @MatrixVariable 이 추가 되었다. 


예제 : 

1. 특정 컬렉션내 키워드를 조회 

2. 키워드 조회시 필요에 따라 3가지 필드 group, keyword, exp 의 값을 만족하는 키워드만 조회 

3. 조회 결과를 페이지별로 볼 수 있도록 함. 


URI : http://example.com/testcoll;group=name;keyword=민창/1


구현 : 


@RequestMapping(value="/{coll}/{page}", method=RequestMethod.GET)

public ModelAndView showKeyword( @PathVariable (value="coll") String coll

,@PathVariable (value="page") int page

,@MatrixVariable ( value="group", required=false, pathVar="coll") String group     ,@MatrixVariable ( value="keyword", required=false, pathVar="coll") String keyword

,@MatrixVariable ( value="exp", required=false, pathVar="coll") String exp ){

}



4번과 같은 주소를 호출 하면 위 함수에서는 아래와같이 자동으로 각 변수에 값을 바인딩 해준다. 


coll = testcoll

page = 1

keyset = name

keyword = 민창

expinfo = null

@MatrixVariable 에 사용되는 각 필드는 아래와 같은 의미 이다. 


value : 파라미터명 

required = 파라미터가 반드시 명시되어야 하는지 여부, 파라미터가 없으면 해당 함수로 매핑이 안됨

pathVar : 파라미터가 어떤 PathVariable 에 붙어서 오는지. 위에서 pathVar 값을 page 로 하였다면 모든 변수가 null

defaultValue : 변수의 기본값 세팅 가능



댓글을 달아 주세요