使用SpringCloudGateway,POST请求使用Body传参,结果调用了两次接口

使用SpringCloudGateway做网关,实现了GlobalFilter接口,增加了服务A,通过网关POST请求A服务接口,参数使用Body传输时,Filter中方法执行了两次

相关代码


自定义Filter

@Component
public class TestFilter implements GlobalFilter, Ordered {

    private Logger logger = LoggerFactory.getLogger(TestFilter.class);

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        logger.info("================       进入了 TestFilter ==========");
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 1;
    }
}

nacos配置

spring:
  cloud:
    gateway:
      routes:
        # service config
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/**
          filters:
            - name: Retry
              args:
                retries: 3
                # statuses: BAD_GATEWAY
                methods: GET
                series: SERVER_ERROR
                backoff:
                  firstBackoff: 50ms
                  maxBackoff: 300ms
                  factor: 2
                  basedOnPreviousValue: false
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/fallback

我尝试把配置或其他代码注释掉,还是会调用两次。这个情况在get或post请求(RequestBody方式)传参时都会出现这个问题。


版本

Spring Cloud Gateway:2.1.3.RELEASE
Spring Cloud:Greenwich.SR3
Spring Boot:2.1.9.RELEASE
阅读 5.6k
1 个回答
✓ 已被采纳新手上路,请多包涵

问题解决了,是gateway版本问题,升级版本后就没问题了。

修改后:

Spring-Boot:2.2.0.RELEASE
Spring-Cloud:Hoxton.M3
Spring-Gateway:2.2.0.M3


其他

Spring-Gateway:2.2.0.M3这个版本阿里云私服是没有的
在POM文件中增加了以下配置就可以了,或者直接修改Maven的Settings.xml文件

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题