Feign发送Get请求时使用对象传递参数(Request method ‘POST‘ not supported问题)

四种解决方案:

1.将get请求改为post请求

优点:快速完成代码修改,进行迭代。

缺点:背离问题本质,没有真正的解决问题。

2.发送请求使用 httpclient,而不是java原生

2.1添加pom依赖

        <!-- 配置feign 发送请求使用 httpclient,而不是java原生 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <!-- 使用Apache HttpClient替换Feign原生httpclient -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
            <version>10.1.0</version>
        </dependency>

2.2 yml设置允许使用httpclient

feign:
  httpclient:
    enabled: true

2.3 方法上添加注解

2.3.1 接口方法请求参数添加@RequestBody
2.3.2 接口方法上@GetMapping 添加 consumes属性

例:

    @ApiOperation(value = "司机信息查看", notes = "")
    @GetMapping(value = "/getDriver",consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public DriverInfoDto getDriver(@RequestBody DriverIdReq driverIdReq);
2.3.3 服务提供方方法上请求参数也需要加@RequestBody注解,方法上@GetMapping 添加 consumes属性

TIP: 服务提供方方法必须与接口方法完全一致,包括@RequestBody注解,@GetMapping 中的 consumes属性,否则会出现拿不到封装的实体对象中的属性值

    @ApiOperation(value = "司机档案查看", notes = "")
    @GetMapping(value = "/getDriver",consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public DriverInfoDto getDriver(@RequestBody DriverIdReq driverIdReq) {
        return infoService.getOneByDriverId(driverIdReq.getDriverId() + "");
    }

优点:代码逻辑变更少,对springcloud版本没有要求

缺点:配置文件修改多,代码修改的细节多,缺一不可。

3.springcloud2.1.0前:使用@requestParam注解 + Map传递请求参数

3.1接口上使用@requestParam注解 + Map传递请求参数

    @ApiOperation(value = "获取所有驾照类型", notes = "")
    @GetMapping(value = "/licenceType")
    public List<String> licenceType(@RequestParam Map map);

3.2服务提供方方法上使用@requestParam注解 + Map传递请求参数

    @ApiOperation(value = "获取所有驾照类型", notes = "")
    @GetMapping("/licenceType")
    public List<String> licenceType(@RequestParam Map adminBaseReq) {
        System.out.println(adminBaseReq);
        return infoService.allDriveLicenceType();
    }

TIP:服务提供方方法必须与接口方法完全一致,包括@requestParam注解,否则会出现拿不到封装的实体对象中的属性值.

优点:代码修改少,不需要修改配置文件,低版本springcloud也可以兼容使用

缺点:参数传递时,map中每个属性的值需要单独写文档标识,不同服务间调用对于参数信息不够明确。

4.springcloud2.1.0后:接口上使用@SpringQueryMap注解

    @ApiOperation(value = "司机档案查看", notes = "")
    @GetMapping(value = "/getDriver")
    public DriverInfoDto getDriver(@SpringQueryMap DriverIdReq driverIdReq);

优点:代码修改少,配置修改少,只需要接口参数上添加@SpringQueryMap注解即可

缺点:不支持2.1.0以前的springcloud版本。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值