PHP-Editor Banana stellte vor, dass Spring Boot WebFlux ein Web-Framework ist, das auf reaktiver Programmierung basiert und eine asynchrone und nicht blockierende Möglichkeit zur Verarbeitung von HTTP-Anfragen bietet. Manchmal kann es jedoch vorkommen, dass WebFilter nicht funktioniert. WebFilter ist eine Komponente, mit der bestimmte Aktionen ausgeführt werden, bevor oder nachdem eine Anfrage in eine Webanwendung gelangt. In diesem Artikel werden die möglichen Gründe untersucht, warum WebFilter nicht funktioniert, und Lösungen bereitgestellt, um sicherzustellen, dass WebFilter in Spring Boot WebFlux ordnungsgemäß funktioniert.
Ich habe den folgenden Controller, der ein Mono aus String zurückgibt
@restcontroller @requestmapping("api/v1/test") public class testcontroller { @postmapping public mono<string> getdraft() { return mono.just("ok"); } }
Ich habe einen Bean-Webfilter hinzugefügt, um etwas zu verarbeiten, wenn die Anfrage kommt. Das Problem ist, dass die Nachricht im Bean nicht in der Konsole angezeigt wird. Ich habe versucht, Haltepunkte zum Debuggen hinzuzufügen, aber wenn ich die API teste, bleibt es nicht dabei der Haltepunkt. Im actuator/beans
中,我找到了 bean slf4jmdcfilter
. Gibt es eine weitere Konfiguration hinzuzufügen?
@Configuration public class WebConfig { public static final String TRX_ID = "transactionId"; public static final String PATH_URI = "pathUri"; @Bean @Order(Ordered.HIGHEST_PRECEDENCE) WebFilter slf4jMdcFilter() { return (exchange, chain) -> { System.out.println("Filtering request"); String requestId = exchange.getRequest().getId(); return chain.filter(exchange) .contextWrite(Context.of(TRX_ID, requestId) .put(PATH_URI, exchange.getRequest().getPath())); }; } }
Dies kann durch die Verwendung von defercontextual(function) erfolgen & transformdeferredcontextual(bifunction)
@Component public class YourFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return Mono.deferContextual(contextView -> chain.filter(exchange) .contextWrite(context -> context.put("KEY", "VALUE"))); } } // controller @Override public Mono<String> testApi(ServerWebExchange exchange) { return Mono.just("OK") .transformDeferredContextual((data, context) -> { log.info("context is {}", (Object) context.get("KEY")); return data; }); }
Das obige ist der detaillierte Inhalt vonSpring Boot WebFlux: WebFilter funktioniert nicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!