diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java index 8f45fee0..fd31bf68 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java @@ -43,7 +43,6 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.core.Ordered; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -166,7 +165,7 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis .switchIfEmpty(Mono.defer(() -> Mono.just(ResponseEntity.badRequest().build()))); } - @PostMapping(value = "/routes", produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping("/routes") @SuppressWarnings("unchecked") public Mono> save(@RequestBody List routes) { routes.stream().forEach(routeDef -> { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java index e17e5fe7..a5a29018 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java @@ -21,9 +21,6 @@ import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; -import org.springframework.http.HttpHeaders; -import org.springframework.http.server.reactive.ServerHttpResponse; -import org.springframework.http.server.reactive.ServerHttpResponseDecorator; import org.springframework.web.server.ServerWebExchange; import static org.springframework.cloud.gateway.support.GatewayToStringStyler.filterToStringCreator; @@ -39,26 +36,8 @@ public class SetResponseHeaderGatewayFilterFactory extends AbstractNameValueGate @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String value = ServerWebExchangeUtils.expand(exchange, config.getValue()); - return chain.filter(exchange).then(Mono.fromRunnable(() -> { - ServerHttpResponse response = exchange.getResponse(); - HttpHeaders headers = response.getHeaders(); - try { - headers.set(config.name, value); - } - catch (UnsupportedOperationException e) { - // ReadOnlyHttpHeaders - HttpHeaders modified = new HttpHeaders(); - modified.putAll(headers); - modified.set(config.name, value); - ServerHttpResponse wrapped = new ServerHttpResponseDecorator(response) { - @Override - public HttpHeaders getHeaders() { - return modified; - } - }; - exchange.mutate().response(wrapped); - } - })); + return chain.filter(exchange) + .then(Mono.fromRunnable(() -> exchange.getResponse().getHeaders().set(config.name, value))); } @Override