[스프링] 스프링 웹플럭스 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