gpt4 book ai didi

修改经过SpringGateway的Json数据

转载 作者:我是一只小鸟 更新时间:2023-09-16 23:02:11 41 4
gpt4 key购买 nike

背景

使用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 。

最后此篇关于修改经过SpringGateway的Json数据的文章就讲到这里了,如果你想了解更多关于修改经过SpringGateway的Json数据的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com