diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java index c34f872243a..125a38816ed 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java @@ -362,15 +362,14 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa ServerHttpResponse response = exchange.getResponse(); String logPrefix = exchange.getLogPrefix(); - // Sometimes a remote call error can look like a disconnected client. - // Try to set the response first before the "isDisconnectedClient" check. - - if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { - logger.error(logPrefix + "500 Server Error for " + formatRequest(request), ex); + if (disconnectedClientHelper.checkAndLogClientDisconnectedException(ex)) { + // Attempt to send 500 in case of onward (rather than client) connection issue + response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); + observationContext.setConnectionAborted(true); return Mono.empty(); } - else if (disconnectedClientHelper.checkAndLogClientDisconnectedException(ex)) { - observationContext.setConnectionAborted(true); + else if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { + logger.error(logPrefix + "500 Server Error for " + formatRequest(request), ex); return Mono.empty(); } else {