feign在DTO传参时GET请求自动转成POST请求

本文档描述了在使用Spring Cloud OpenFeign时遇到的一个问题:GET请求被错误地转换为POST请求。通过分析代码,发现是DTO参数导致的问题。解决方案是利用@SpringQueryMap将DTO转换为查询参数,同时添加Feign的httpclient配置和相关依赖以启用HTTP客户端支持。经修改后,需要进行测试以验证问题是否已解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

场景

1. 网关请求发送到后端从GET变成了POST
2. 代码如下:
// 使用openfeign发请求时,发现GET请求转成了POST
@FeignClient(name = "pd-auth-server", fallback = ResourceApiFallback.class)
public interface ResourceApi {

    // 获取所有需要鉴权的资源
    @GetMapping("/resource/list")
     R<List> list();

    // 查询当前用户拥有资源
    @GetMapping("/resource")
     R<List<Resource>> visible(ResourceQueryDTO resource);
}

// 后端Controller
   /**
     * 查询用户可用的所有资源
     */
    @ApiOperation(value = "查询用户可用的所有资源",notes = "查询用户可用的所有资源")
    @GetMapping
    @SysLog("查询用户可用的所有资源")
    public R<List<Resource>> visible(ResourceQueryDTO resource) {
        if (resource == null) {
            resource = new ResourceQueryDTO();
        }

        if (resource.getUserId() == null) {
            resource.setUserId(getUserId());
        }
        return success(resourceService.findVisibleResource(resource));
    }

    /**
     * 新增资源
     */
    @ApiOperation(value = "新增资源", notes = "新增资源不为空的字段")
    @PostMapping
    @SysLog("新增资源")
    public R<Resource> save(@RequestBody @Validated ResourceSaveDTO data) {
        Resource resource = dozer.map(data, Resource.class);
        resourceService.save(resource);
        return success(resource);
    }

解决

1. 使用SpringQueryMap 将DTO转成query params , [参考文档](https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.1.5.RELEASE/multi/multi_spring-cloud-feign.html#_feign_querymap_support)

@FeignClient(name = "pd-auth-server", fallback = ResourceApiFallback.class)
public interface ResourceApi {

    // 获取所有需要鉴权的资源
    @GetMapping("/resource/list")
     R<List> list();

    // 查询当前用户拥有资源
    @GetMapping("/resource")
     R<List<Resource>> visible(@SpringQueryMap ResourceQueryDTO resource);
}

2. 待测试
加入Feign的配置项
feign:
  httpclient:
    enabled: true
加入这两个依赖
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.9</version>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
            <version>10.2.3</version>
        </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值