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 8f4788adafb..bd3edea6ace 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 @@ -267,12 +267,14 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa ServerHttpResponse response = exchange.getResponse(); String logPrefix = exchange.getLogPrefix(); - if (isDisconnectedClientError(ex)) { - // Request handling error (e.g. remote call), if we manage to set the status.. - if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { - logger.error(logPrefix + "500 Server Error for " + formatRequest(request), ex); - return Mono.empty(); - } + // 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); + return Mono.empty(); + } + else if (isDisconnectedClientError(ex)) { if (lostClientLogger.isTraceEnabled()) { lostClientLogger.trace(logPrefix + "Client went away", ex); } @@ -282,10 +284,6 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa } return Mono.empty(); } - else if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { - logger.error(logPrefix + "500 Server Error for " + formatRequest(request), ex); - return Mono.empty(); - } else { // After the response is committed, propagate errors to the server... logger.error(logPrefix + "Error [" + ex + "] for " + formatRequest(request) +