Hi I have the following webfilter
@Component
public class TMPFilter implements WebFilter {
private long requestTime = System.nanoTime();
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
long deltaTime = System.nanoTime() - requestTime;
exchange.getResponse().getHeaders().add("server-timing-test", "test");
System.out.println(deltaTime);
return chain.filter(exchange)
.doOnRequest(request -> {
requestTime = System.nanoTime();
})
.doOnSuccess( arg -> {
long delta = System.nanoTime() - requestTime;
exchange.getResponse().getHeaders().add("server-timing-success", Long.toString(delta));
})
.doOnError((arg) -> {
long delta = System.nanoTime() - requestTime;
exchange.getResponse().getHeaders().add("server-timing-error", Long.toString(delta));
})
.doFinally((arg) -> {
long delta = System.nanoTime() - requestTime;
exchange.getResponse().getHeaders().add("server-timing-finally", Long.toString(delta));
});
}
}
I'd like to send back a response with a header with the time it took resolve that response. Am not sure how to go about this, am getting the following error.
java.lang.UnsupportedOperationException: null
at org.springframework.http.ReadOnlyHttpHeaders.add(ReadOnlyHttpHeaders.java:91)
Suppressed: java.lang.UnsupportedOperationException: null
at org.springframework.http.ReadOnlyHttpHeaders.add(ReadOnlyHttpHeaders.java:91)
at com...tmp.api.filters.TMPFilter.lambda$filter$1(TMPFilter.java:28)
This seems to do the trick: