feign.FeignException$NotFound报错的解决方法,亲测有效,嘿嘿嘿

feign.FeignException$NotFound 异常

问题分析

feign.FeignException$NotFound 异常是 Feign 客户端在尝试调用远程服务时遇到的一个常见异常。这个异常通常表示 Feign 客户端发送的 HTTP 请求没有成功,因为远程服务没有返回预期的 HTTP 响应状态码(如 200 OK),而是返回了一个 404 Not Found 状态码。

报错原因

报错原因可能有多种:

  1. 远程服务未启动:远程服务可能没有在运行状态,因此无法响应请求。
  2. 服务路由问题:在微服务架构中,服务路由配置可能错误,导致请求被发送到了错误的地址。
  3. API 地址或方法不存在:请求的 API 地址或方法可能不存在于远程服务中。
  4. 版本不兼容:客户端和服务器端可能使用了不兼容的 API 版本。
  5. 权限问题:客户端可能没有足够的权限去访问远程服务。
解决思路
  1. 检查远程服务状态:确保远程服务已经启动并且正常运行。
  2. 检查服务路由配置:检查微服务架构中的服务路由配置,确保请求被正确发送到目标服务。
  3. 验证 API 地址和方法:确认你正在尝试调用的 API 地址和方法在远程服务中是存在的。
  4. 检查 API 版本:确保客户端和服务器端使用的是相同的 API 版本。
  5. 检查权限配置:确保客户端具有访问远程服务的必要权限。
解决方法

以下是一些具体的解决方法,包括代码示例:

  1. 检查远程服务状态

    • 如果使用 Docker 或其他容器技术,可以检查容器的状态。
    • 如果服务是部署在云上的,可以检查云服务提供商的控制台。
  2. 检查服务路由配置(以 Spring Cloud 为例):

  3. 下滑查看解决方法

  • 确保 application.ymlapplication.properties 文件中的服务发现配置(如 Eureka)是正确的。
  • 确保 Feign 客户端的 @FeignClient 注解中的服务名称是正确的。
# application.yml
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

# 定义一个 Feign 客户端
@FeignClient(name = "remote-service")
public interface RemoteServiceClient {
    // 定义方法...
}
  1. 验证 API 地址和方法

    • 查看远程服务的文档或源代码,确认你正在尝试调用的 API 地址和方法是存在的。
    • 使用工具(如 Postman 或 curl)直接调用远程服务的 API,看是否能得到正确的响应。
  2. 检查 API 版本

    • 如果你的服务使用了 API 版本控制(如 Spring Cloud 的 @RequestMapping(path = "/v1/...")),确保客户端和服务器端使用的是相同的版本。
  3. 检查权限配置

    • 如果你使用的是 OAuth2 或其他身份验证机制,确保客户端具有正确的令牌或凭证。
    • 检查远程服务的权限配置,确保客户端具有访问所需资源的权限。
  4. 增加日志记录

    • 在 Feign 客户端的配置中增加日志记录,以便在出现问题时能够捕获更多的上下文信息。
    # application.yml
    logging:
      level:
        your.package.RemoteServiceClient: DEBUG
    
  5. 使用 Feign 的错误解码器

    • 你可以自定义 Feign 的错误解码器来处理 404 Not Found 异常,并返回更有意义的错误信息或执行特定的操作。
    public class CustomErrorDecoder implements ErrorDecoder {
        @Override
        public Exception decode(String methodKey, Response response) {
            if (response.status() == 404) {
                return new CustomNotFoundException("Resource not found");
            }
            return super.decode(methodKey, response);
        }
    }
    
    // 配置 Feign 客户端时使用自定义的错误解码器
    @FeignClient(name = "remote-service", errorDecoder = CustomErrorDecoder.class)
    public interface RemoteServiceClient {
        // 定义方法...
    }
    

以上就是解决 feign.FeignException$NotFound 异常的一些常见方法和代码示例。希望对你有所帮助!

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中的错误信息显示,出现了feign.FeignException$NotFound: status 404的错误。引用\[2\]中提到,在远程调用时尽量不要使用路径传参,否则可能会出现FeignException$NotFound: status 404的错误。引用\[3\]中的错误信息也显示了类似的错误,即feign.FeignException$NotFound: \[404 Not Found\]。根据这些信息,可以得出结论,feign.FeignException$NotFound: status 404是表示远程接口调用时发生了404错误,即请求的资源未找到。 #### 引用[.reference_title] - *1* [feign.FeignException$NotFound: status 404 reading](https://blog.csdn.net/weixin_59401183/article/details/128217318)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Feign feign.FeignException$NotFound: status 404 reading](https://blog.csdn.net/qq_51886300/article/details/127881431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [feign.FeignException$NotFound: [404 Not Found] Gateway层级错误【已解决】](https://blog.csdn.net/tomorrow9813/article/details/131599996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值