Adds message back to response in case of timeout exception.

fixes gh-820
This commit is contained in:
Spencer Gibb
2019-02-06 15:37:38 -05:00
parent ea0c6c1b5a
commit 68d048f897
2 changed files with 6 additions and 2 deletions

View File

@@ -87,6 +87,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered {
}
@Override
@SuppressWarnings("Duplicates")
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
@@ -174,7 +175,9 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered {
if (properties.getResponseTimeout() != null) {
responseFlux = responseFlux.timeout(properties.getResponseTimeout(),
Mono.error(new TimeoutException("Response took longer than timeout: " +
properties.getResponseTimeout()))).onErrorMap(TimeoutException.class, th -> new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, null, th));
properties.getResponseTimeout())))
.onErrorMap(TimeoutException.class,
th -> new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, th.getMessage(), th));
}
return responseFlux.then(chain.filter(exchange));

View File

@@ -44,7 +44,8 @@ public class NettyRoutingFilterIntegrationTests extends BaseWebClientTests {
.exchange()
.expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT)
.expectBody()
.jsonPath("$.status").isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value()));
.jsonPath("$.status").isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value()))
.jsonPath("$.message").isEqualTo("Response took longer than timeout: PT3S");
}
@EnableAutoConfiguration