首页 > 其他分享 >feign调用报错status 404

feign调用报错status 404

时间:2023-05-04 22:33:06浏览次数:56  
标签:status FeignClient feign name url request value 404 报错

feign调用报错status 404

使用feign,报错:FeignException: status 404。如下:

Caused by: feign.FeignException: status 404 reading #; 
	at feign.FeignException.errorStatus(FeignException.java:62)
	at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
	at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)

Debug

跟踪查看方法栈中的方法,报错代码 SynchronousMethodHandler类的 executeAndDecode()方法 如下:

可以看到 发送了一个请求,获取响应。可以在 response = this.client.execute(request, this.options); 打个断点,看一下

request请求的url是什么。

    Object executeAndDecode(RequestTemplate template) throws Throwable {
        Request request = this.targetRequest(template);
        if (this.logLevel != Level.NONE) {
            this.logger.logRequest(this.metadata.configKey(), this.logLevel, request);
        }

        long start = System.nanoTime();

        Response response;
        try {
        	//发送请求,获取响应
        	//可以在这里打个断点,看一下request请求的url是什么。
            response = this.client.execute(request, this.options);
            response.toBuilder().request(request).build();
        } catch (IOException var15) {
            if (this.logLevel != Level.NONE) {
                this.logger.logIOException(this.metadata.configKey(), this.logLevel, var15, this.elapsedTime(start));
            }

            throw FeignException.errorExecuting(request, var15);
        }
    }

调试的示例如下,可以在调试中发现 request 中的 url是什么:

错误原因:

url不对的原因有可能是:

  • 服务消费者调用的url,跟服务提供者的url不一样

仔细检查一下url的路径。

  • 服务消费者调用时,@FeignClient注解的 name/value 属性写错了,与 服务提供者url的contextPath(上下文)不一致。

@FeignClient注解的 name/value属性,会指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。

比如:服务提供者的url是 /user/detail,而服务消费者使用feign时,@FeignClient注解的 name/value属性指定为 my-service,那么服务消费者调用的url就是 /my-service/user/detail,两边不一致。

name/value属性写错了,就会报错404。

解决方法:

  • 修正url,让服务消费者调用的url,与服务提供者的url保持一致。

仔细检查下 @RequestMapping 组成的 url,是否正确。

  • 修正 @FeignClient注解的 name/value属性,让url保持一致。

仔细检查下服务消费者的 @FeignClient注解的 name/value属性, 是否与服务提供者的contextPath(上下文)一致。

  • 如果还是不行,通过 @FeignClient注解的 url 属性,直接指定 url。

比如用properties文件配置(或者配置中心配置)一个变量 my.url 指定 url,不同的环境可以配置不同的url。

变量 my.url 后面的:表示默认值。

直接指定url,就不会受到 @FeignClient注解的 name/value属性的影响。

如下 :

@FeignClient(name = "my-service", url = "${my.url:localhost:5001/user/}" )
public interface MyServiceApi {

    @PostMapping("/detail")
    void send(@RequestBody Body body);

}

参考资料:

https://blog.csdn.net/sinat_38332832/article/details/119814245

标签:status,FeignClient,feign,name,url,request,value,404,报错
From: https://www.cnblogs.com/expiator/p/17372743.html

相关文章

  • 【Redis】一次报错小记
    背景当时是这样子的,业务系统开发,当时主责开发一个模块,突然某一天,它就启动不了了,报了一个错:ERRThisinstancehasclustersupportdisabled(Redis的报错提示)嗯,就是这个东西。很迷,一直都是好的,咋突然就不行了呢?明明就没有用到redis,怎么会报这个错呢,虽然依赖里面引入了,但......
  • springboot单元测试中添加了@Autowired任然报错nullpoint(已解决)
     使用了autowired还是报错空指针异常说明就是包没有导入,springboot导包的操作在于启动application类,所以问题就在于没有单元测试时没有启动主类,解决方法:@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes=SaTokenDemoApplication.class)加上如上的注解,@runwi......
  • linux find命令只输出结果 不输出报错信息
     find/-name"*filename*"2>/dev/null *filename*改成你想要查找的文件即可,模糊查找请加上相应的通配符 转自:https://blog.csdn.net/qq_35544379/article/details/111401707  ......
  • Python报错:Can't connect to HTTPS URL because the SSL module is not available
    参考文章:(32条消息)Can‘tconnecttoHTTPSURLbecausetheSSLmoduleisnotavailable-关于anaconda中的SSL模块错误_anacondahttps报错_Sky_Tree_Delivery的博客-CSDN博客具体操作:将以下文件移动位置D:\Anaconda\Library\bin->D:\Anaconda\DLLs(此处D盘为我自己的安......
  • 报错汇总
    ERROR1799(HY000):Creatingindex'PRIMARY'requiredmorethan'innodb_online_alter_log_max_size'bytesofmodificationlog.Pleasetryagain.该日志文件存储了DDL操作期间对表的insert,update,delete的数据记录临时日志文件每次以innodb_sort_buffer_size为单位进......
  • vCenter报错:Log Disk Exhaustion on 10
    vCenter报错:LogDiskExhaustionon101、问题现象:巡检时发现vCenterServer中,错误显示为:LogDiskExhaustionon10(字面意思是日志磁盘耗尽),VC版本6.7在浏览器输入https://appliance-IP-address-or-FQDN:5480,通过5480端口登录VAMI(vCenterServerApplianceManagementI......
  • Nacos修改权重报错caused: errCode: 500, errMsg: do metadata operation failed ;caus
    今天修改Nacos权重时报错如下:caused:errCode:500, caused:errCode:500,errMsg:dometadataoperationfailed;caused:com.alibaba.nacos.con。解决方案:停掉nacos服务将nacos文件夹下data中的protocol文件夹删除重启nacos服务即可 ......
  • 若依登录验证码不显示404访问问题
    最近在学习接触Java,那若依开源项目来练练手,部署后发现登录界面的登录验证码一直刷不出来,提示404访问错误。查看网上一直没找到解决办法。但知道原理都是配置文件的问题。后来在一个其他项目上找到灵感,给nginx的nginx.conf配置文件增加配置信息,项目可以正常启动并可以正常登录了。......
  • github报错Failed to connect to github.com port 443 after 21313 ms: Couldn't conn
    github报错Failedtoconnecttogithub.comport443after21313ms:Couldn'tconnecttoserver网络连接问题,我开vpn了。github报错Recvfailure:Connectionwasreset该错误通常表示网络连接问题,可能是您的Internet连接出现问题或GitHub服务器上的连接问题。刷新重新登......
  • 关于pandas.ExcelWriter()对象在执行.save()时报错FutureWarning: save is not part o
    有时使用pandas将多份数据,写入到Excel中不同的Sheet,可能会用到pandas.ExcelWriter("xxxx.xlsx")对象这样在结束时,就会对对象进行.save()和close(),当然这也是从大部分网站上看到的使用方法但是笔者在实际使用过程中,按这个过程,遇到报错:FutureWarning:saveisnotpartofthepu......