首页 > 解决方案 > @FeignClient 强制 @GetMapping 和 @RequestBody 发布

问题描述

我使用具有 BODY 的 GET 方法跟踪 REST 控制器,它适用于测试和邮递员

@RestController
@RequestMapping(value = "/xxx")
public class Controller {
    @GetMapping({"/find"})
    public LocalDateTime findMax(@RequestBody List<ObjectId> ids) {
        //return sth   
    }
}

但是当 FeignClient 用于调用服务时,而不是 GET 请求会生成一个 POST 请求(@GetMapping 注解被忽略)

@FeignClient
public interface CoveragesServiceResource extends CoveragesService {
    @GetMapping({"/find"})
    LocalDateTime findMax(@RequestBody List<ObjectId> ids);
}

这给出了一个错误:

Request method 'POST' not supported

标签: javaspring-bootnetflix-feign

解决方案


GET 请求在技术上可以有正文,但正文应该没有这个答案中解释的意义。您可能可以使用主体声明 GET 端点,但某些网络库和工具根本不支持它,例如 Jersey 可以配置为允许它,但 RESTEasy 不能按照这个答案

建议声明/find为 POST 或不使用@RequestBody.


推荐阅读