SpringCloud gateway戻りデータの変更

3908 ワード

詳細
バージョンの説明
オープンソースソフトウェアバージョン
springboot
2.1.6.RELEASE
jdk
11.0.3
gradle
主にspringboot 2.1,lombokを導入しました
plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
    id "io.freefair.lombok" version "3.6.6"
}

apply plugin: 'io.spring.dependency-management'

group = 'cn.buddie.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "Greenwich.SR2")
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    compile 'org.projectlombok:lombok:1.18.8'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

 
yaml
ルーティングおよびフィルタtest-routeルーティングを定義し、Pathが/usersの場合、uriで構成されているリンクに移動します.http://127.0.0.1:8123/usersに表示されます.UnionResultを使用してフィルタリング
spring:
  cloud:
    gateway:
      enabled: true
      routes:
      - id: test-route
        uri: http://127.0.0.1:8123/users
        predicates:
        - Path=/users
        filters:
        - UnionResult

 
filter
yamlに設定されているfilterの名前に「GatewayFilterFactory」を付けると、対応するフィルタJavaクラスになります
package cn.buddie.demo.springcloudgateway.filter;

import cn.buddie.demo.springcloudgateway.model.UnionResult;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.rewrite.ModifyResponseBodyGatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.rewrite.RewriteFunction;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

/**
 * description
 *
 * @author buddie.wei
 * @date 2019/7/20
 */
@Component
public class UnionResultGatewayFilterFactory extends ModifyResponseBodyGatewayFilterFactory {
    @Override
    public GatewayFilter apply(Config config) {
        return new ModifyResponseGatewayFilter(this.getConfig());
    }


    private Config getConfig() {
        Config cf = new Config();
        // Config.setRewriteFunction(Class inClass, Class outClass, RewriteFunction rewriteFunction)
        // inClass      ,           ,      Object,           。
        //                                         ,yaml    ,path,uri       
        // outClass       
        // rewriteFunction       
        cf.setRewriteFunction(Object.class, UnionResult.class, getRewriteFunction());
        return cf;
    }

    private RewriteFunction getRewriteFunction() {
        return (exchange, resp) -> Mono.just(UnionResult.builder().requestId(exchange.getRequest().getHeaders().getFirst("cn-buddie.demo.requestId")).result(resp).build());
    }
}

 
model
package cn.buddie.demo.springcloudgateway.model;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

/**
 * description
 *
 * @author buddie.wei
 * @date 2019/7/20
 */
@Getter
@Setter
@Builder
public class UnionResult {
    private String requestId;
    private Object result;
}