java / expert
Snippet
Globales reaktives Fehlermanagement mit WebExceptionHandler
In Spring WebFlux reicht @ControllerAdvice oft nicht aus, wenn Fehler außerhalb des Controller-Kontexts auftreten. Die Erweiterung von AbstractErrorWebExceptionHandler ermöglicht eine low-level, nicht-blockierende Kontrolle über die globale Fehler-Response-Pipeline.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component@Order(-2)public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {public GlobalErrorWebExceptionHandler(ErrorAttributes errorAttributes, WebProperties webProperties, ApplicationContext applicationContext, ServerCodecConfigurer configurer) {super(errorAttributes, webProperties.getResources(), applicationContext);this.setMessageWriters(configurer.getWriters());}@Overrideprotected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {return RouterFunctions.route(RequestPredicates.all(), request -> {Map<String, Object> error = errorAttributes.getErrorAttributes(request, ErrorAttributeOptions.defaults());return ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR).bodyValue(error);});}}
spring
Erklärung
1
@Order(-2)
Stellt sicher, dass dieser Handler Vorrang vor den Standard-Fehler-Handlern von Spring Boot hat.
2
getRoutingFunction(ErrorAttributes errorAttributes)
Definiert die Logik, um alle Fehler an einen spezifischen funktionalen Response-Handler zu leiten.