@RequestMapping annotation은 컨트롤러 클래스나 메소드가 특정 HTTP Request URL을 처리하도록 매핑하기 위해서 사용한다. 그래서 클래스 선언부에 @RequestMapping을 적용할 수도 있고(이하 Type-Level), 클래스의 메소드에 @RequestMapping을 적용할 수도 있다(이하 Method-Level). 예를 들어, Type-Level@RequestMapping("/movies")라고 정의하고, Method-Level@RequestMapping("/new") 라고 정의하면 @RequestMapping("/new")라고 정의한 메소드가 처리하는 URL 경로는 "/movies/new" 가 된다. @RequestMapping"/movies/*.do"와 같은 Ant 스타일 경로 패턴도 지원한다. @RequestMapping에는 URL 경로 외에도 HTTP methodRequest 파라미터 등을 추가하여 처리할 URL의 범위를 줄일 수 있다.

또한, Spring 3 부터 REST 스타일의 Web Application 개발을 위해서 URI templates을 지원하기 시작했다. Spring 3에서 추가된 REST 관련 기능들과 REST Style 웹 어플리케이션 개발에 대한 자세한 내용은 본 매뉴얼 Restweb Plugin을 참고하기 바란다.

다음은 @RequestMapping을 사용하여 처리할 URL을 매핑한 코드예이다.

 

@Controller @RequestMapping("/foundationMovie.do")public class MovieController {

 

@RequestMapping(params="method=get")public String get(

 

@RequestParam("movieId") String movieId, Model model) throws Exception {

Movie movie = this.movieService.get(movieId); //... model.addAttribute(movie); return "foundationViewMovie"; } }

 

@RequestMapping annotation에는 다음과 같은 상세 속성 정보를 부여하여 처리할 URL의 범위를 한정지을 수 있다.

name

Description

value

"value='/getMovie.do'"와 같은 형식의 매핑 URL 값이다. 디폴트 속성이기 때문에 value만 정의하는 경우에는 'value='은 생략할 수 있다.

: @RequestMapping(value={"/addMovie.do", "/updateMovie.do" }) 이와 같은 경우 "/addMovie.do", "/updateMovie.do" URL 모두 처리한다.

method

GET, POST, HEAD 등으로 표현되는 HTTP Request method에 따라 requestMapping을 할 수 있다. 'method=RequestMethod.GET' 형식으로 사용한다. method 값을 정의하지 않는 경우 모든 HTTP Request method에 대해서 처리한다. :@RequestMapping(method = RequestMethod.POST). 이 경우 value 값은 클래스 선언에 정의한 @RequestMappingvalue 값을 상속받는다.

params

HTTP Request로 들어오는 파라미터 표현이다.'params={"param1=a", "param2", "!myParam"}' 로 다양하게 표현 가능하다.

: @RequestMapping(params = {"param1=a", "param2", "!myParam"})위의 경우 HTTP Requestparam1param2 파라미터가 존재해야하고 param1의 값은 'a'이어야하며, myParam이라는 파라미터는 존재하지 않아야한다. 또한, value 값은 클래스 선언에 정의한 @RequestMappingvalue 값을 상속받는다.

headers

HTTP Request의 헤더 값이다.'headers="someHader=someValue"', 'headers="someHader"', 'headers="!someHader"' 로 다양하게 표현 가능하다. AcceptContent-Type 같은 헤더에 대해서 media type 표현 시 '*' 도 지원한다. : @RequestMapping(value="/movie.do", headers="content-type=text/*") 의 경우 HTTP RequestContent-Type 헤더 값이 "text/html", "text/plain" 모두 매칭이 된다. 또한, Type-Level, Method-Level에서 모두 사용할 수 있는데, Type-Level에 정의된 경우, 하위의 모든 핸들러 메소드에서도 Type-Level에서 정의한 헤더값 제한이 적용된다.

@RequestMapping은 구현하는 컨트롤러 종류에 따라 아래와 같은 방식으로 사용할 수 있다.

Form 컨트롤러 구현

Multi-action 컨트롤러 구현

기존에 SimpleFormController와 같은 컨트롤러 클래스를 상속받아서 컨트롤러를 작성할 때는, 상위클래스에 정의된 메소드를 override하여 구현하기 때문에 입력 argument 타입과 return 타입이 이미 정해져있다. 이에 반해 @RequestMapping을 적용하여 작성하는 핸들러 메소드는 다양한 argument 타입과 return 타입을 사용할 수 있다.

[출처 : anyframejava 내용 발최]

[출처] @RequestMapping|작성자 사자

'프로그래밍 > JAVA' 카테고리의 다른 글

JSTL <c:forEach> 사용법  (0) 2016.03.04
오라클 클라이언트 설치 윈도우 7  (0) 2013.01.15
페이지 디렉티브(page, include, taglib)  (0) 2012.10.17
Posted by VentoIin

공지사항

카테고리

Information Security
====================..
보안
====================..
시스템 일반
프로그래밍
웹 해킹
데이터베이스
리눅스
강의 정리
자료실
====================..
자동차
====================..
보컬
====================..
BLOG main image
정보보호의 필요성~~ by VentoIin
Total :
Today : Yesterday :