Bitaholic

Spring 3.0 Request Mapping (Suffix Pattern, Path Variable) 본문

Computer/Spring

Spring 3.0 Request Mapping (Suffix Pattern, Path Variable)

Bitaholic 2010. 10. 20. 16:41
스프링을 쓰면 Http Request를 적절한 클래스의 적절한 메소드로 연결하는(Mapping) 작업을 비교적 쉽게 할 수 있다. 여러가지 방법이 있지만 Java Annotation (@RequestMapping)을 이용해서 클래스 또는 메소드에다가 쓰면 해당 규칙에 맞는 Http Request가 그 메소드를 호출 할 수 있도록 해준다. 그 규칙은 Request URL, Request Header, Request parameter , Http method 조합으로 정해 주는데 Request URL은 ant 타입으로 쓸 수 있다. ( *, ** 를 쓸 수 있다) 

ex1)
아래의 예는 http://host/context/user 로 오는 요청을  handlerUser(..) 메소드에 전달 해준다.
@RequestMapping("/user")
public void handleUser(...) {...}

ex2)
아래의 예는 Header로 content-type이 text/*에 해당되고 /user로 요청만 메소드로 전달해준다. 
@RequestMapping(value = "/user", headers="content-type=text/*")

Path Variable
Spring 3.0에서는 RESTful webservice를 지원하기 위해 path variable기능이 추가 되었다. 간단하게 설명하면 " /부서/이름" 이런 포맷의 REST요청을 URL을 파싱하지 않고 바로 메소드 인자로 받을 수 있는 기능이다. 
아래와 같이 선언을 하면 각 URL의 부분들이 해당 인자로 매핑이 된다.  
@RequestMapping(value="/{department}/{employee}")
public void handleMethod(@PathVariable String department, @PathVariable String employee) {...) 

Suffix Pattern
이때 DefaultAnnotationHandlerMapping 은 @RequestMapping에 자동으로 몇몇 접미어를 붙여서 ReqestMapping 리스트에 추가 한다. 즉 위와 같은 예에서는
  • /{department}/{employee}
  • /{department}/{employee}.*
  • /{department}/{employee}/
위와 같은 RequestMapping을 자동으로 추가해 준다. 즉 /sales/thomas, /sales/thomas/, /sales/thosmas.add 와같은 URL로 자동으로 매핑이 된다. 이러한 패턴을 쓰기 싫으면 DefaultAnnotationHandlerMapping 에서 해당 옵션을 꺼주어야 한다. 스프링 설정 파일에서 다음과 같이 설정을 꺼줄 수 있다.
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
   <property name="useDefaultSuffixPattern" value="false"/>
</bean>


Comments