1
what is the right way to handle errors in spring-webflux에 제안 된 3 가지 솔루션을 모두 시도했지만 이 호출되지 않습니다. 나는 Spring Boot 2.0.0.M7
을 사용하고 있습니다. Github에서 REPO hereSpring 5 Reactive - WebExceptionHandler가 호출되지 않습니다.
@Configuration
class RoutesConfiguration {
@Autowired
private lateinit var testService: TestService
@Autowired
private lateinit var globalErrorHandler: GlobalErrorHandler
@Bean
fun routerFunction():
RouterFunction<ServerResponse> = router {
("/test").nest {
GET("/") {
ServerResponse.ok().body(testService.test())
}
}
}
}
@Component
class GlobalErrorHandler() : WebExceptionHandler {
companion object {
private val log = LoggerFactory.getLogger(GlobalErrorHandler::class.java)
}
override fun handle(exchange: ServerWebExchange?, ex: Throwable?): Mono<Void> {
log.info("inside handle")
/* Handle different exceptions here */
when(ex!!) {
is ClientException -> exchange!!.response.statusCode = HttpStatus.BAD_REQUEST
is Exception -> exchange!!.response.statusCode = HttpStatus.INTERNAL_SERVER_ERROR
}
return Mono.empty()
}
}
업데이트 : 2.0.0.M2
에 봄 부트 버전을 변경하면 WebExceptionHandler
가
라고지고 있습니다. 2.0.0.M7
에 대해 조치를 취해야합니까?
는 해결책 :
브라이언의 제안에 따라, 그것은 그렇지 않으면 오류를 처리 할 수, 당신은 당신의 자신의 WebExceptionHandler
를 제공 할 수 있습니다,하지만 당신은 다른 사람에게 상대적를 주문해야
@Bean
@Order(-2)
fun globalErrorHandler() = GlobalErrorHandler()
스프링 부트 빌트인 'AbstractErrorWebExceptionHandler'는 웹 페이지 기반 애플리케이션의 글로벌 오류 처리에 더 친숙한 것으로 보입니다. REST 애플리케이션의 경우, http 상태와 엔티티를 설정하는 솔루션처럼'@ RestControllerAdvice'를 제공하는 것이 더 낫다고 생각합니다. – Hantsy