@FeignClient 强制 @GetMapping 和 @RequestBody POST

jto*_*szk 6 java spring-boot netflix-feign

我有以下带有 GET 方法的 REST 控制器,该方法具有 BODY,可与测试和邮递员一起正常工作

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

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

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

这给出了一个错误:

Request method 'POST' not supported
Run Code Online (Sandbox Code Playgroud)

Kar*_*cki 5

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

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


归档时间:

查看次数:

3926 次

最近记录:

7 年,7 月 前