- 스프링 MVC 핸들러
MVC의 Controller 안에서 실제 요청을 처리하는 메소드를 핸들러(Handler)라고 한다. 사용자로부터 서버로 요청이 가면, 해당 요청에 맞는 컨트롤러의 핸들러로 요청 정보가 전해지고, 핸들러는 이를 처리하여 적절한 값을 반환 한다. 그리고 요청과 핸들러를 연결하는 것을 핸들러 맵핑(Handller Mapping)이라고 하고, @RequestMapping 어노테이션을 사용하여 맵핑이 이루어진다.
- 요청 맵핑: @RequestMapping
Http Request, 즉 서버로의 요청 정보는 다음과 같은 구조로 되어있다.
먼저 요청하는 첫번쨰 줄(start-line)에 메소드와 URL 요청경로가 나오고, 그 다음 헤더(http headers)에 요청자의 정보와 주고받을 데이터 양식에 대한 정보가 들어있다. 이후 필요한 경우, 본문(body)부분에 추가적인 데이터가 들어갈 수 있다. 첫번째 줄의 메소드&경로와 헤더부분의 정보들을 보고, 핸들러 맵핑을 할 수 있다.
@RequestMapping(method = RequestMethod.GET, path = "/myhandler")
public Object myhandler() {
...
}
위의 코드는 GET 메소드, /myhandler로 오는 요청을 myhandler() 메소드에 맵핑시킨 것이다. 이처럼 @ReqeustMapping을 사용하여 요청과 핸들러를 맵핑한다.
속성명 |
설명 |
path |
요청 경로를 지정한다. |
method |
요청 메소드(GET,POST,PUT,DELETE…)를 지정한다. |
params |
요청 파라미터(유무 또는 값)을 지정한다. |
headers |
요청 헤더(유무 또는 값)를 지정한다. |
consumes |
요청 헤더의 Content-Type 값를 지정한다. |
produces |
요청 헤더의 Accept 값을 지정한다. |
@RequestMapping에서 사용할 수 있는 속성은 위와 같이 있다. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping을 사용하면 method 속성을 생략할 수 있다.
- 핸들러 메소드 매개변수
핸들러 메소드에서는 사용자의 요청정보를 다양한 매개변수로 받을 수 있다. 예를들어 쿼리 파라미터로 온 정보가 있다면, @RequestParam을 사용하여 해당 데이터를 매개변수로 받는다.
@RequestMapping(method = RequestMethod.GET, path = "/myhandler")
public Object myhandler(@RequestParam("age") Integer age) {
...
}
"/myhandler?age=28"와 같은 요청이 온다면, @RequestParam을 사용하여 age 매개변수에는 28이라는 값이 들어간다. 이외에도 핸들러에서 사용할 수 있는 매개변수는 다양하게 존재한다.
타입 |
설명 |
HttpEntity<?> |
Http 요청,응답 정보를 가지고 있는 객체 |
java.util.Locale |
사용자의 국가, 언어 정보 |
java.util.TimeZone |
사용자의 시간대 정보 |
java.security.Principal |
사용자의 인증 정보 |
위와같은 타입의 매개변수를 정의하면 설명과 같은 정보를 받을 수 있다. 이 외에도 스프링 MVC에서 지원하는 타입은 더 존재한다.
어노테이션 |
설명 |
@PathVariable |
URL 경로 변수 값 |
@RequestParam |
쿼리 파라미터 변수 값 |
@RequestHeader |
헤더 속성 값 |
@RequestBody |
요청 본문 값. 자동 타입 변환을 지원한다. |
@CookieValue |
사용자 쿠키 값 |
위와같은 어노테이션의 매개변수를 정의하면 설명과 같은 정보를 받을 수 있다. 이 외에도 스프링 MVC에서 지원하는 어노테이션은 더 존재한다.
- 핸들러 메소드 반환값
핸들러는 요청을 모두 처리하고, 사용자에게 응답을 보내줘야한다. 핸들러에는 이에 맞는 여러 반환값을 지정할 수 있는데, 일반적으로 사용자에게 보여줄 뷰의 이름을 반환한다.
@RequestMapping(method = RequestMethod.GET, path = "/myhandler")
public String myhandler(@RequestParam("age") Integer age) {
...
return 'myview';
}
위와 같이, String타입으로 값을 반환하면 스프링 MVC가 이에 맞는 뷰 파일을 찾아서 사용자에게 전달해준다.
타입 |
설명 |
java.lang.String |
뷰 이름을 반환한다. |
ResponseEntity<?> |
응답 해더와 본문 객채를 반환한다. |
HttpHeaders |
응답 해더만 반환한다. |
위와같은 타입의 반환값를 정의하면 설명과 같은 내용을 사용자에게 전달 할 수 있다.