spring cloud gateway 一直404访问不到啊?

新手上路,请多包涵

spring cloud gateway 一直404访问不到啊,但是不通过配置的都可以请求到
真的搞不懂,捅咕半天。

通过gateway访问不到
image.png

不走gateway可以
image.png
image.png

目录
image.png

  1. gateway模块
    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>com.gate</groupId>
         <artifactId>gateway-try</artifactId>
         <version>1.0-SNAPSHOT</version>
     </parent>
    
     <artifactId>gateway</artifactId>
    
     <properties>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <spring-cloud.version>2021.0.5</spring-cloud.version>
     </properties>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-gateway</artifactId>
         </dependency>
     </dependencies>
    
     <dependencyManagement>
    
         <dependencies>
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
                 <version>${spring-cloud.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>
    </project>

    application.yml

server:
  port: 9500

spring:
  cloud:
    gateway:
      routes:
        - id: account
          uri: http://127.0.0.1:9501
          predicates:
            - Path=/account/**
#          filters:
#            - StripPrefix=1

启动
image.png
controller
image.png

  1. product
    pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.gate</groupId>
        <artifactId>gateway-try</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>product</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
    </properties>
    <dependencies>
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-web</artifactId>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

application.yml

server:
  port: 9501

启动
image.png
controller
image.png

而且很奇怪
gateway模块下加入filters,能访问到http://localhost:9500/account/product,难道不是应该访问的http://localhost:9500/product这里么,但是访问不到
image.png
image.png

server:
  port: 9500

spring:
  cloud:
    gateway:
      routes:
        - id: account
          uri: http://127.0.0.1:9501
          predicates:
            - Path=/account/**
          filters:
            - StripPrefix=1

而且还考虑加入跨域配置,又捅咕半天没啥结果,都试了一下也没解决,应该不是那个问题吧,真的很无语,感觉和视频里没差啊

阅读 513
avatarAI BotBETA

回答

出现404错误通常意味着请求的路径没有正确匹配到任何路由。在Spring Cloud Gateway中,这可能是由于路由配置不正确或下游服务未正确响应。以下是一些可能的解决步骤和检查点:

  1. 确认路由配置

    • 确保application.yml中的路由配置正确。你的配置中,/account/**路径会被转发到http://127.0.0.1:9501
    • 如果你希望通过http://localhost:9500/product访问到product服务,你需要添加一个对应的路由。例如:

      spring:
        cloud:
          gateway:
            routes:
              - id: account
                uri: http://127.0.0.1:9501
                predicates:
                  - Path=/account/**
              - id: product
                uri: http://127.0.0.1:9501  # 假设product服务也运行在同一个端口,否则应更改端口
                predicates:
                  - Path=/product/**
  2. 检查服务是否启动

    • 确保你的下游服务(在这个例子中是运行在9501端口的product服务)已经正确启动并且可以接受请求。
  3. StripPrefix过滤器

    • 你提到添加了StripPrefix=1过滤器后能够访问到http://localhost:9500/account/product。这是因为StripPrefix=1会从请求路径中移除第一个路径段(这里是account),所以实际的请求路径变成了/product,这正好匹配到了你的product服务的控制器(如果它存在的话)。
    • 如果你的product服务的控制器是映射到/product路径的,那么你需要确保路由配置正确,不需要StripPrefix过滤器或者需要调整过滤器的参数。
  4. 跨域配置

    • 跨域问题通常会导致浏览器控制台出现CORS错误,而不是404错误。但如果你怀疑有跨域问题,确保你的Gateway和下游服务都配置了正确的CORS策略。
  5. 日志和调试

    • 增加日志级别以获取更多关于请求处理的详细信息。在Spring Boot中,你可以通过设置logging.level.org.springframework.cloud.gateway=DEBUG来获取Gateway的详细日志。
  6. 检查Spring Cloud和Spring Boot版本兼容性

    • 确保你使用的Spring Cloud和Spring Boot版本是兼容的。在你的pom.xml中,你使用了Spring Cloud 2021.0.5和Spring Boot 2.7.6,这两个版本通常是兼容的,但最好检查一下官方文档以确认。

通过上述步骤,你应该能够诊断并解决404错误的问题。如果问题仍然存在,可能需要更详细地检查你的代码和配置。

1 个回答
新手上路,请多包涵

刚看了个文档,不知道算不算解决办法,在filters中配置RewritePath,这样可以通过http://localhost:9500/account/product 请求到,但还是觉得,不用额外配置filters就应该可以访问到才行吧,搞不清楚蒙圈了。
filters:

  • RewritePath=/account(?<segment>/?.*), ${segment}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏