I have declared two custom Global filter in spring cloud gateway application. Iam setting response header in both filters.
The error Iam encountering is
Blockquote
“Error [java.lang.UnsupportedOperationException] for HTTP GET “/location”, but ServerHttpResponse already committed”
Filter definition are below:
@Component
public class CustomRequestFilter1 implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("inside CustomRequestFilter1 class filter method:");
ServerHttpRequest request = exchange.getRequest();
request.mutate().header("globalFilterRequestKey", "globalFilterRequestKey");
return chain.filter(exchange).then(Mono.fromRunnable( () -> {
System.out.println("CustomRequestFilter1 response");
ServerHttpResponse response = exchange.getResponse();
response.getHeaders().set("header1", "CustomRequestFilter1");
}));
}
@Override
public int getOrder() {
return -1;
}
}
@Component
public class CustomRequestFilter2 implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("inside CustomRequestFilter2 class filter method:");
ServerHttpRequest request = exchange.getRequest();
request.mutate().header("globalFilterRequestKey2", "globalFilterRequestKey2");
return chain.filter(exchange).then(Mono.fromRunnable( () -> {
System.out.println("CustomRequestFilter2 response");
ServerHttpResponse response = exchange.getResponse();
response.getHeaders().set("header1", "CustomRequestFilter2");
}));
}
@Override
public int getOrder() {
return 1;
}
}