修改经过Spring Gateway的Json数据

这篇具有很好参考价值的文章主要介绍了修改经过Spring Gateway的Json数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

使用Spring Cloud Gateway作为网关时经常会需要对报文内的json数据进行修改,但是目前看到的实现方法看起来都很复杂,这里提供一种使用Spring官方提供的ModifyRequestBodyGatewayFilterFactory类来修改json报文的方法

依赖

  • Spring Boot版本:2.7.15
  • Hutool: 5.8.21
  • Java: 11

实现逻辑

实现分为两个部分

  • filter:在自定义的filter内注入ModifyRequestBodyGatewayFilterFactory类,然后调用,该类会自动完成对修改结果的重新包装。
  • service: 自定义的service实现ModifyRequestBodyGatewayFilterFactory类的RewriteFunction<T, R>接口完成对json数据的处理

自定义filter

@Component
@Slf4j
public class RequestModifyFilter implements GlobalFilter, Ordered {
    @Autowired
    private ModifyRequestBodyGatewayFilterFactory modifyRequestBodyFilter;
    @Autowired
    private JsonRequestBodyRewriteService jsonRequestBodyRewriteService;

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        MediaType mediaType = exchange.getRequest().getHeaders().getContentType();
        if (MediaType.APPLICATION_json.isCompatibleWith(mediaType)) {
            // 纯json报文处理逻辑
            return modifyRequestBodyFilter
                    .apply(
                            new ModifyRequestBodyGatewayFilterFactory.Config()
                                    .setRewriteFunction(byte[].class, byte[].class, jsonRequestBodyRewriteService))
                    .filter(exchange, chain);
        } else {
            return filter(exchange, chain);
        }

    }

    @Override
    public int getOrder() {
        return OrderConstant.REQUEST_MODIFY_FILTER.getOrder();
    }
}

自定义service

@Service
@Slf4j
public class JsonRequestBodyRewriteService implements RewriteFunction<byte[], byte[]> {
    @Override
    public Publisher<byte[]> apply(ServerWebExchange exchange, byte[] body) {
        jsonObject request = jsonUtil.parseObj(body);
        log.info("原始报文:{}", request.toString());
        try {
            request.set("empId", "2345");
            request.set("department", "Engineering");

            log.info("修改后报文:{}", request);
            return Mono.just(request.toString().getBytes());
        } catch (Exception e) {
            log.error("修改报文时出错",e);
            throw e;
        }
    }
}

相关代码

https://github.com/eastcukt/demo-gatway

参考

https://amitkhurana92.medium.com/request-body-transformation-in-spring-cloud-gateway-bb9c234d5f3d文章来源地址https://www.toymoban.com/news/detail-712272.html

到了这里,关于修改经过Spring Gateway的Json数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot进阶(70):如何在Spring Boot中使用FastJson实现高效的JSON数据处理?

      随着互联网的发展,JSON(JavaScript Object Notation)已成为近年来使用最广泛的数据交换格式之一。为了提高JSON数据的处理效率,目前市面上常用的JSON解析库有Jackson、Gson、FastJson等。本文将介绍如何在Spring Boot中使用FastJson实现高效的JSON数据处理。   那么,具体如何实现

    2024年02月09日
    浏览(47)
  • spring boot 使用AOP+自定义注解+反射实现操作日志记录修改前数据和修改后对比数据,并保存至日志表

    使用FieldMeta自定义注解,看个人业务自行觉得是否需要重新定义实体 实现类 :通过该实现类获取更新前后的数据。 该实现类的实现原理为:获取入参出入的id值,获取sqlSessionFactory,通过sqlSessionFactory获取selectByPrimaryKey()该方法,执行该方法可获取id对应数据更新操作前后的数

    2024年01月23日
    浏览(52)
  • idea修改背景为护眼背景模式、淡黄色、淡绿色等,内附多张纯色背景图片供使用

    idea默认的黑色比较酷,但是晚上看比较费眼,自带的白色看的比较清楚,但是对于一个程序员来说,一天十几个小时都要对着电脑,看着还是眼睛还是挺累的,那么来给你的idea换个护眼的背景吧,像淡黄色、淡绿色之类的。 更换背景步骤: 打开idea,点击左上角的“File”,

    2024年02月14日
    浏览(39)
  • Python将数据写入json文件,并修改或更新json文件

    前言 本文是该专栏的第19篇,后面会持续分享python的各种干货知识,值得关注。 假设工作上,需要将目标数据写入到json文件。之后,会需要将目标数据的某些字段进行更新或者更改操作,需要怎么操作呢? 再或者,在接口中提供该json文件,让别人提供参数请求该接口,进行

    2024年02月04日
    浏览(35)
  • Spring Cloud Gateway的快速使用

    环境前置搭建Nacos:点击跳转 Spring Cloud Gateway Docs 新建gateway网关模块 pom.xml 导入依赖     编写启动类 GatewayApplication.java (不是新模块就不用编写)     application.yml 配置gateway     完成以上配置,直接启动即可,访问 http://localhost:10010     GatewayFilter Factories 过滤器工厂:Gat

    2024年02月11日
    浏览(45)
  • spring.cloud.gateway 说明和使用方式

    spring.cloud.gateway 是 SpringCloud 技术栈中的网关组件,提供了基于路由的请求转发、请求限流、服务降级、负载均衡等功能。使用方式如下: 引入依赖 在 SpringBoot 项目中,添加以下依赖: 配置路由规则 在项目的配置文件中,配置路由规则,例如: 以上配置指定了两个路由规则

    2024年02月10日
    浏览(45)
  • 【Spring Cloud】Gateway的配置与使用

    Gateway其实是 springcloud 原生 的东西,但是我还是想放在这里讲,因为我们使用nacos时,前端调用服务之后,一般会调用到我们的网关上面,然后网关选择我们的nacos服务,再调用后端的服务 在当今微服务架构中,网关起着至关重要的角色。它充当着应用程序和外部世界之间的

    2024年02月09日
    浏览(35)
  • Spring Cloud Gateway 使用 Redis 限流使用教程

    从本文开始,笔者将总结 spring cloud 相关内容的教程 版本选择 为了适应 java8,笔者选择了下面的版本,后续会出 java17的以SpringBoot3.0.X为主的教程 SpringBoot 版本 2.6.5 SpringCloud 版本 2021.0.1 SpringCloudAlibaba 版本 2021.0.1.0 SpringCloudAlibaba github 版本说明截图 SpringCloud 官网:https://sp

    2024年02月07日
    浏览(36)
  • 在spring cloud中使用gateway报错404(踩坑)

    在我写一个spring cloud小demo时,在浏览器访问报错中报错404,让我百思不得其解,    以下是错误代码展示 teacher业务 teacher配置文件 gateway配置文件 在上述gateway配置文件中出现的错误 - Path=/teacherserver/** 正确是应该是 -Path=/teacher/** Path应该与controller对应 当然,这是我粗心大意

    2024年02月04日
    浏览(44)
  • Spring Gateway使用JWT实现统一身份认证

    在开发集群式或分布式服务时,鉴权是最重要的一步,为了方便对请求统一鉴权,一般都是会放在网关中进行处理。目前非常流行的一种方案是使用JWT,详细的使用说明,可以找相关的资料查阅,这里先不进行深入的引用了。主要使用它下面的特性: 它的数据使用JSON格式封

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包