[스프링] 스프링 웹플럭스 Webflux.fn
프론트 컨트롤러에서 요청/응답 처리 방법
스프링 웹 모듈을 사용하여 웹 애플리케이션을 구현하는 경우 프론트 컨트롤러 클래스의 핸들러 메서드에서 요청/응답을 처리하기 객체는 다음과 같다.
- Servlet 기반 Spring MVC 컨트롤러:
HttpServletRequest
/HttpServletResponse
- Spring Webflux 컨트롤러:
ServerHttpRequest
/ServerHttpResponse
- Spring Webflux의 함수형 프로그래밍 모델을 위한 Webflux.fn:
ServerRequest
/ServerResponse
요청 값 추출
- 요청 패스 추출
GET("/{*path}") { request -> val requestPath = request.pathVariable("path").substring(1) }
- 요청 쿼리 추출
GET("/{*path}") { request -> val requestUri = request.uri() }
응답 처리
- 응답 헤더 설정
val responseHeaders = HttpHeaders() responseHeaders.add("Content-Type", "application/json; charset=UTF-8") ServerResponse.ok() .headers { headers -> headers.addAll(responseHeaders) } .body(result, String::class.java) }
CORS 활성화
GET("/").and(
CrossOrigin("http://localhost:3000")
) { request ->
val requestUri = request.uri()
}
코루틴
RouterFunctionDsl
내에서 코루틴 사용suspend fun routerForProxy(): RouterFunction<ServerResponse> { return coRouter { GET("/") { request -> fetchData(request) } } suspend fun fetchDate(request: ServerRequest): ServerResponse { return ServerResponse.ok() .headers { headers -> headers.addAll(responseHeaders) } .body(result, String::class.java) }
Comments