Develop

WebClient 에러 처리

작은이야기 2023. 1. 10. 15:28

request 개별 적용

webClient.get()
    .uri { uriBuilder ->
        uriBuilder.path("/v1/~~~~~")
            .queryParam("aaa", 11)
            .queryParam("bbb", 222)
            .build()
    }
    .retrieve()
	.onStatus(HttpStatus::is5xxServerError) {
        val response = it.bodyToMono<Coupon.ErrorResponse>().block()
        Mono.error(HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR, response.detailMessage ?: ""))
    }
    .awaitBody<List<ResponseItem>>()

 

webclient 적용

ExchangeFilterFunction.ofResponseProcessor { clientResponse: ClientResponse ->
    if (clientResponse.statusCode().is5xxServerError) {
        return@ofResponseProcessor clientResponse.bodyToMono(String::class.java)
            .flatMap { errorBody: String? ->
                val body = objectMapper.readValue(errorBody, ErrorResponse::class.java)
                Mono.error(
                    HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR, body.detailMessage ?: "")
                )
            }
    } else {
        return@ofResponseProcessor Mono.just(clientResponse)
    }
}