|
45 | 45 | import org.springframework.web.reactive.function.server.ServerRequest; |
46 | 46 | import org.springframework.web.reactive.function.server.ServerResponse; |
47 | 47 | import org.springframework.web.reactive.result.view.ViewResolver; |
| 48 | +import org.springframework.web.server.ResponseStatusException; |
48 | 49 | import org.springframework.web.server.ServerWebExchange; |
49 | 50 | import org.springframework.web.util.DisconnectedClientHelper; |
50 | 51 | import org.springframework.web.util.HtmlUtils; |
|
55 | 56 | * @author Brian Clozel |
56 | 57 | * @author Scott Frederick |
57 | 58 | * @author Moritz Halbritter |
| 59 | + * @author US JUN |
58 | 60 | * @since 4.0.0 |
59 | 61 | * @see ErrorAttributes |
60 | 62 | */ |
@@ -296,7 +298,7 @@ public Mono<Void> handle(ServerWebExchange exchange, Throwable throwable) { |
296 | 298 | .switchIfEmpty(Mono.error(throwable)) |
297 | 299 | .flatMap((handler) -> handler.handle(request)) |
298 | 300 | .doOnNext((response) -> logError(request, response, throwable)) |
299 | | - .flatMap((response) -> write(exchange, response)); |
| 301 | + .flatMap((response) -> write(exchange, response, throwable)); |
300 | 302 | } |
301 | 303 |
|
302 | 304 | private boolean isDisconnectedClientError(Throwable ex) { |
@@ -333,7 +335,12 @@ private String formatRequest(ServerRequest request) { |
333 | 335 | return "HTTP " + request.method() + " \"" + request.path() + query + "\""; |
334 | 336 | } |
335 | 337 |
|
336 | | - private Mono<? extends Void> write(ServerWebExchange exchange, ServerResponse response) { |
| 338 | + private Mono<? extends Void> write(ServerWebExchange exchange, ServerResponse response, Throwable throwable) { |
| 339 | + if (throwable instanceof ResponseStatusException responseStatusException) { |
| 340 | + responseStatusException.getHeaders() |
| 341 | + .forEach((name, values) -> values |
| 342 | + .forEach((value) -> exchange.getResponse().getHeaders().add(name, value))); |
| 343 | + } |
337 | 344 | // force content-type since writeTo won't overwrite response header values |
338 | 345 | exchange.getResponse().getHeaders().setContentType(response.headers().getContentType()); |
339 | 346 | return response.writeTo(exchange, new ResponseContext()); |
|
0 commit comments