Spring Web MVC
DispatcherServlet
g
Spring MVC는 DispatcherServlet
이 애플리케이션의 중심에서 요청 처리를 위해 공유되는 알고리즘을 제공하고 실제 동작은 따로 설정 가능한 대리 컴퍼넌트가 하게 되는 front controller 패턴으로 설계되었다.
기본적인 요청 처리 흐름
DispatcherServlet
이 클라이언트로부터 요청을 전달받는다.DispatcherServlet
이HandlerMapping
인터페이스에게 요청 처리에 적합한 Controller를 찾는 작업을 위임한다.HandlerMapping
으로부터 받은 controller 정보를 바탕으로DispatcherServlet
이HandlerAdapter
인터페이스에게 해당 controller 클래스 내의 handler 메서드를 호출하는 작업을 위임한다.HandlerAdapter
가 controller 내의 handler를 호출하여 model과View
정보를 받아오고 이를 바탕으로DispatcherServlet
이 적합한View
인터페이스를 찾는 작업을ViewResolver
인터페이스에게 위임한다.ViewResolver
에게 받은View
정보를 바탕으로DispatcherServlet
이View
에게 응답 데이터 생성(렌더링)을 위임한다.View
로부터 받은 응답 데이터를DispatcherServlet
이 클라이언트로 전달한다.
References
@SpringBootApplication
Using the @SpringBootApplication Annotation
@RequestMapping
Further Reading
- MIME types (IANA media types) - HTTP | MDN
- HTTP request methods - HTTP | MDN
- HTTP response status codes - HTTP | MDN
HTTP Headers
HttpServletRequest
에서 요청 header를 확인할 수 있고,
HttpServletResponse
에 응답 header를 설정할 수 있다.- User-Agent
Custom Headers
- HTTP headers and Application Load Balancers, AWS ELB
- Create custom headers in backend services, Google Cloud Load Balancing
REST Clients
URI Links
HttpMessageConverter
Validation
@Valid
, @Validated
- 핸들러 메서드에서
@Valid
나@Validated
를@RequestBody
와 같은 매개변수에 써서 인자로 들어오는 객체를 validation할 수 있다. - 메서드 매개변수에
@Positive
등 Java Bean Validation API를 사용하려면 클래스나 메서드에@Validated
를 작성해야 한다.- 인자로 들어오는 객체 자체를 validation하는 데에는 굳이 클래스, 메서드 단계에
@Validated
를 작성할 필요없다.
- 인자로 들어오는 객체 자체를 validation하는 데에는 굳이 클래스, 메서드 단계에
References
Lombok
@Getter
, @Setter
, @AllArgsConstructor
, @NoArgsConstructor
, @Data
, @ToString
MapStruct
Gradle Configuration
...
plugins {
...
id "com.diffplug.eclipse.apt" version "3.26.0" // Only for Eclipse
}
dependencies {
...
implementation "org.mapstruct:mapstruct:${mapstructVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
// If you are using mapstruct in test code
testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
}
...