0 Tage Serie
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
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());
}
@Override
protected 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.