From 68d048f8974ba7c38a332fdde2966878f416d406 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 6 Feb 2019 15:37:38 -0500 Subject: [PATCH] Adds message back to response in case of timeout exception. fixes gh-820 --- .../cloud/gateway/filter/NettyRoutingFilter.java | 5 ++++- .../gateway/filter/NettyRoutingFilterIntegrationTests.java | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java index 6621be86..e451f35f 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java @@ -87,6 +87,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { } @Override + @SuppressWarnings("Duplicates") public Mono 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)); diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java index bd684467..b9670209 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java @@ -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