Browse Source

Adds produces to post /routes

pull/2966/head
spencergibb 1 year ago
parent
commit
a545731d78
No known key found for this signature in database
GPG Key ID: 7788A47380690861
  1. 3
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java
  2. 25
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java

3
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java

@ -43,6 +43,7 @@ import org.springframework.context.ApplicationEventPublisher; @@ -43,6 +43,7 @@ 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;
@ -165,7 +166,7 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis @@ -165,7 +166,7 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis
.switchIfEmpty(Mono.defer(() -> Mono.just(ResponseEntity.badRequest().build())));
}
@PostMapping("/routes")
@PostMapping(value = "/routes", produces = MediaType.APPLICATION_JSON_VALUE)
@SuppressWarnings("unchecked")
public Mono<ResponseEntity<Object>> save(@RequestBody List<RouteDefinition> routes) {
routes.stream().forEach(routeDef -> {

25
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java

@ -21,6 +21,9 @@ import reactor.core.publisher.Mono; @@ -21,6 +21,9 @@ 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;
@ -36,8 +39,26 @@ public class SetResponseHeaderGatewayFilterFactory extends AbstractNameValueGate @@ -36,8 +39,26 @@ public class SetResponseHeaderGatewayFilterFactory extends AbstractNameValueGate
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String value = ServerWebExchangeUtils.expand(exchange, config.getValue());
return chain.filter(exchange)
.then(Mono.fromRunnable(() -> exchange.getResponse().getHeaders().set(config.name, value)));
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);
}
}));
}
@Override

Loading…
Cancel
Save