Spring MVC 핸들러 메소드 아규먼트와 리턴 타입
Spring Web MVC
백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글
핸들러 메소드 아규먼트와 리턴 타입
사용자 리퀘스트 요청을 처리하는 핸들러 메소드 Argument
들에 대해 살펴보자.
WebRequest, NativeWebRequest
요청 또는 응답 자체에 접근 가능한 API이다.
광범위하게 사용자 요청의 정보를 얻어낼 수 있다.
그러나 상당히 Low해서 잘 쓰이지는 않는다고 한다.
NativeWebRequest의 경우 HTTPServletRequest,Response로 변환할 수 있다고 한다.
HttpServletRequest(Response), ServletRequest(Response)
HttpServlet이나 Servlet을 그대로 받아서 사용할 수 있다.
역시나 실제로 잘 쓸일이 없다.
InputStream, OutputStream or Reader, Writer
요청 본문을 읽어오거나, 응답 본문을 쓸 때 사용할 수 있는 API
스프링이 아닌 자바에서 제공하기 때문에 Servlet에 대한 지식이 많이 필요하지 않는다.
역시나 실제로 사용하는 경우는 드물다.
PushBuilder
Spring 5, HTTP/2 리소스 푸쉬에 사용한다.
HTTP/1.1에서는 특정 URL로 사용자가 접근할 때 핸들러가 브라우저의 렌더링에 필요한 데이터를 클라이언트에게 넘겨준다.
이후 클라이언트는 특정 리소스(이미지같은)의 요청을 보낼 때 다시 한번 서버에게 요청을 보내야한다.
HTTP/2에서는 Stream으로 데이터를 주고 받기 때문에, 한번 연결을 맺고 브라우저를 렌더링에 필요한 데이터를 Stream 단위로 클라이언트에게 전송하기 때문에 연결을 맺는 Hop이 줄어들게 된다.
HttpMethod
GET,POST 등에 대한 정보를 얻어올 수 있다.
Locale, TimeZone, ZoneId
스프링 MVC가 LocaleResolver
를 사용해서 분석한 요청의 Locale 정보를 얻어올 수 있다.
Annotation
사실상 가장 많이 쓰이는 핸들러 Argument
들
@PathVariable : URI 템플릿 변수 읽을 때 사용
@MatrixVariable : URI 경로 중에 키/값 쌍을 읽어 올 때 사용
@RequestParam : 서블릿 요청 매개변수 값을 선언한 메소드 아규먼트 타입으로 변환해준다.
@RequestHeader : 요청 헤더 값을 선언한 메소드 아규먼트 타입으로 변환해준다.
@RequestBody : Http 본문을 HttpMessageConverter를 사용하여 접근할 때 사용한다.
@ResponseBody : 리턴 값을 HttpMessageConverter를 사용해 응답 본문으로 사용한다.
HttpEntity, ResponseEntity : 응답 본문 뿐 아니라 헤더 정보까지, 전체 응답을 만들 때 사용한다. 조금 더 섬세하게 커스터마이징이 가능하다. REST API를 만들기 위해서 반드시 사용해야하는 클래스.
String : ViewResolver를 사용해 뷰를 찾을 때 사용할 뷰 이름
View : View를 직접 리턴할 수 있다.
Model : Model 정보만 넘긴다. 그럼 View는 어떻게 되는가? Spring MVC는 요청에서 View의 이름을 유추해서 ViewResolver에게 찾으라고 시킨다.
Reference
인프런 백기선님의 스프링 Web MVC