ModifyResponseBody 過濾器

您可以使用 ModifyResponseBody 過濾器,在響應體傳送回客戶端之前對其進行修改。

此過濾器只能透過 Java DSL 進行配置。

以下清單展示瞭如何修改響應體過濾器

GatewaySampleApplication.java
import static org.springframework.cloud.gateway.server.mvc.filter.AfterFilterFunctions.modifyResponseBody;
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;

@Bean
public RouterFunction<ServerResponse> gatewayRouterFunctionsModifyResponseBodySimple() {
	return route("modify_response_body")
			.GET("/anything/modifyresponsebody", http())
            .before(uri("https://example.org"))
			.after(modifyResponseBody(String.class, String.class, null,
					(request, response, s) -> s.replace("fooval", "FOOVAL")))
			.build();
}

上面的示例沒有改變內容型別,也沒有進行任何動態操作。下面的示例改變了內容型別並動態地修改了內容。

GatewaySampleApplication.java
import static org.springframework.cloud.gateway.server.mvc.filter.AfterFilterFunctions.modifyResponseBody;
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
import static org.springframework.cloud.gateway.server.mvc.predicate.GatewayRequestPredicates.host;
import org.springframework.http.MediaType;

@Configuration
class RouteConfiguration {

    @Bean
    public RouterFunction<ServerResponse> gatewayRouterFunctionsModifyResponseBody() {
        return route("modify_response_bodu")
            .route(host("*.modifyresponsebodu.org"), http())
            .before(uri("https://example.org"))
            .after(modifyResponseBody(String.class, String.class, MediaType.APPLICATION_JSON_VALUE,
                    (request, s) -> s.toUpperCase()))
            .build();
    }

}