`
buddie
  • 浏览: 185057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringCloud gateway 修改返回数据

 
阅读更多

版本说明

开源软件 版本
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<T> inClass, Class<R> outClass, RewriteFunction<T, R> rewriteFunction)
        // inClass 原数据类型,可以指定为具体数据类型,我这里指定为Object,是为了处理多种数据类型。
        //                      当然支持多接口返回多数据类型的统一修改,yaml中的配置,path,uri需要做相关调整
        // outClass 目标数据类型
        // rewriteFunction 内容重写方法
        cf.setRewriteFunction(Object.class, UnionResult.class, getRewriteFunction());
        return cf;
    }

    private RewriteFunction<Object, UnionResult> 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;
}

 

分享到:
评论

相关推荐

    SpringCloud Finchley Gateway 缓存请求Body和Form表单的实现

    在构建微服务架构时,Spring Cloud Gateway作为API网关,起着至关重要的作用。它提供了路由、过滤器等功能,能够方便地对上游请求进行处理和转发。然而,有些场景下,我们可能需要缓存请求的Body(如JSON数据)或...

    Spring Cloud Gateway全局通用异常处理的实现

    总结来说,Spring Cloud Gateway全局异常处理的实现是通过自定义`ErrorWebExceptionHandler`来完成的,它允许我们控制异常的处理方式,确保在各种异常情况下都能返回统一格式的响应。这对于提升系统的稳定性和用户...

    spring-cloud-gateway:Spring Cloud Gateway

    **Spring Cloud Gateway 深度解析** Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个关键组件,作为微服务架构中的 API 网关,它扮演着路由、过滤器、安全、负载均衡等多种角色。这个框架是基于 Spring ...

    springCloud集成ureport,并通过网关访问的源码修改

    下面我们将详细介绍如何进行源码修改,以便将UReport与Spring Cloud整合,并通过Zuul网关进行访问。 首先,我们需要在Spring Cloud的配置文件中添加UReport的相关配置。这通常包括UReport服务器的地址、端口、以及...

    SpringCloud面试题 .pdf

    这一过程是 SpringCloud 自动实现的,只需要在 main 方法添加 @EnableDiscoveryClient 同一个服务修改端口就可以启动多个实例。调用方法:传递服务名称通过注册中心获取所有的可用实例,通过负载均衡策略调用...

    Spring Cloud.zip

    8. **Spring Cloud Gateway**:相较于Zuul,Spring Cloud Gateway提供了更强大的路由规则和过滤器功能,它基于Spring Framework和Project Reactor,可以更好地支持非阻塞流和响应式编程。 9. **Spring Cloud Data ...

    基于springboot与springcloud的demo完整项目。graduation.zip

    《基于SpringBoot与SpringCloud的Demo完整项目解析》 在当今的互联网开发领域,SpringBoot和SpringCloud已经成为构建微服务架构的重要工具。本项目“基于springboot与springcloud的demo完整项目”提供了一个完整的...

    spring cloud alibaba限流sentinel开发工具

    3. 使用Sentinel Gateway:如果项目使用了Spring Cloud Gateway,可以集成Sentinel Gateway,实现网关层面的流量控制和保护。 4. 集成其他组件:Sentinel与Spring Cloud Config、Nacos等组件有良好的集成,可以实现...

    基于Spring Cloud与Vue前后端分离开发实现的代码评测项目OJ系统源码.zip

    4. **API网关**:Spring Cloud Gateway或Zuul可以作为系统的统一入口,进行路由转发、权限验证、限流等操作。 **Vue.js** Vue.js是一款轻量级的前端JavaScript框架,用于构建用户界面。Vue的特点包括声明式渲染、...

    关于applicationx-www-form-urlencoded等字符编码的解释说明

    multipart/form-data是另一种常用的编码格式,它将窗体数据编码为一条消息,页上的每个控件对应消息中的一个部分。这种编码格式可以上传文件,并且可以处理复杂的数据结构。 在实际开发中,我们需要根据具体情况...

    滨江的一个sprincloud项目实施实施

    【滨江的SpringCloud项目实施详解】 在IT行业中,SpringCloud是一个广泛使用的微服务框架,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导...

    spring经典学习集合

    这个"spring经典学习集合"包含的四本教程可能涵盖了Spring框架的基础到高级的应用,包括Spring MVC、Spring Boot、Spring Cloud等相关内容。 1. **Spring核心概念** - **依赖注入**:这是Spring的核心,通过DI,...

    sentinel-dashboard-1.8.0.jar

    7. **与Spring Cloud生态的整合**:Sentinel 很好地融入了Spring Cloud生态系统,可以与Spring Cloud Gateway、Feign等组件无缝对接,提供微服务间的流量控制。 8. **扩展性**:Sentinel 提供了丰富的插件机制,...

    产品线网关统一认证、鉴权架构及设计

    在本设计中,我们提出了一种基于Spring Cloud Gateway的解决方案,旨在为产品线提供统一的访问入口和服务治理能力。具体目标包括: 1. **统一调用路径和风格**:规范API接口的设计和调用方式,提升用户体验。 2. **...

    paShanHuJava-:爬山虎后台

    - **Zuul或Gateway**:作为边缘服务和API网关,Zuul(SpringCloud组件)或Spring Cloud Gateway可以处理路由转发、认证、限流等功能,保护内部微服务并提供统一的入口。 - **Hystrix或Sentinel**:用于实现熔断和...

    sentinel-1.8.5.jar

    Sentinel 是一个由 Alibaba 开源的流量控制、熔断降级、系统负载保护的 Java 库,它在分布式服务架构中...在实际开发中,结合 Spring Cloud 或 Dubbo 等框架,Sentinel 能够更好地助力构建高可用、高弹性的分布式系统。

    JAVA面试题附答案,祝你面试顺利

    - **知识点**: Spring Cloud是一个基于Spring Boot实现的云应用开发工具包,它包含多个核心组件,例如Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)等。 - **题目解析**: Dubbo不是一个Spring ...

    乐优商城.xmind

    springCloud mybatis启动器 通用Mapper启动器 mysql驱动 分页助手启动器 FastDFS客户端 其他配置 构建设置 环境设置 EurekaServer注册中心 添加的依赖 启动类 application.yml 创建Zuul网关 依赖 ...

    秒杀系统企业级实战应用(真实工业界案例)

    - **架构层面**:采用了微服务架构模式,并结合Spring Cloud实现了服务间的解耦合;同时利用Nginx作为反向代理服务器进行智能路由调度; - **技术实现**:基于MySQL+Redis存储结构化数据和非结构化数据;利用Elastic...

    基于微服务的网上商城系统的设计与实现

    - **Spring Cloud**:提供了一套微服务解决方案,支持服务发现、配置管理、路由、负载均衡等功能。 - **Spring Cloud Alibaba**:提供了Nacos作为服务注册中心,Sentinel作为服务容错框架等组件。 - **Elastic...

Global site tag (gtag.js) - Google Analytics