请求OpenFeign的GET请求时,请求为何失败?

请求OpenFeign的GET请求时,请求为何失败?

在OPENFEGIN的接口中定义了一个GET请求方式的方法,且方法中带有入参,入参并没有任何添加任何注解,如下所示:

@FeignClient(name = "myfegin", path = "/api/test")
public interface MyFeignClient {
   
    @GetMapping(path = "/getMessage")
    JsonResult<String> getVideoDuration(String id);

}

当我们通过另一个微服务中的接口通过 OpenFeign 的客户端调用该接口时,提示接口调用失败,自然也就没有任何返回。

通过在Feign所在的客户端断点,发现如下提示:

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:213)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:422)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367)
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110)
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59)
    // 省略错误信息

看到上述报错信息时,也是百思不得其解,Request method 'POST' not supported 不支持 POST 请求,但是我们所发送的是 GET 请求,由此我们借用断点调试发现,当我们发送的 GET 请求到了 OpenFeign 服务端后,服务端检测到该请求携带一个入参,并且入参没有做任何注解修饰,因此默认将该请求当做 POST 请求处理,而服务端对应该路径的请求只有 GET ,所以报错。

解决方案:

FeignClient 客户端的 GET 请求中的入参前面加入注解修饰:@requestParam 即可解决该问题

@FeignClient(name = "myfegin", path = "/api/test")
public interface MyFeignClient {
   
    @GetMapping(path = "/getMessage")
    JsonResult<String> getVideoDuration(@RequestParam("id") String id);

}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值