spring5 reactive-web 사용시 주의할 점

2018-02-08 19:38

어제 spring5의 reactive-web을 기반으로 스터디를 진행했다.

그런데 소스 코드는 똑같은데 handler와 router를 분리해서 개발하는 방식으로 구현했더니 계속해서 404가 발생했다. 분명 나와 같은 코드인데 아무리 디버깅을 해도 해결할 수 없었다. 원인은 depedency에 있었다.

depedency가 다음과 같이...

compile('org.springframework.boot:spring-boot-starter-web') 
compile('org.springframework.boot:spring-boot-starter-webflux')

위 dependency에서 spring-boot-starter-webflux만 설정해야 하는데 spring-boot-starter-web까지 추가해 발생하는 이슈였다. 처음 시작할 때 같은 실수를 반복할 것 같다. 이 둘은 동작방식이 다르기 때문에 별개로 추가하고 사용하는 것이 맞겠다.

예제로 사용한 코드는 다음과 같다.

import org.springframework.stereotype.Component
import reactor.core.publisher.Mono
 
@Component
class HelloWorldHandler {
    fun helloworld() : Mono<String> {
        return Mono.just("Hello World")
    }
}
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.reactive.config.EnableWebFlux
import org.springframework.web.reactive.function.server.RouterFunction
import org.springframework.web.reactive.function.server.ServerResponse
import org.springframework.web.reactive.function.server.body
import org.springframework.web.reactive.function.server.router
 
@Configuration
class RoutingConfiguration {
    @Bean
    fun routeFunction(handler: HelloWorldHandler) : RouterFunction<ServerResponse> = router {
        ("/").nest {
            GET("/helloworld2") { req ->
                ServerResponse.ok().body(
                        handler.helloworld()
                )
            }
        }
    }
}

코틀린 코드라 자바와 좀 다르다.

0개의 의견 from SLiPP

의견 추가하기

연관태그

← 목록으로