Feign发送get请求使用对象传参问题,@SpringQueryMap解析传参对象父类属性解决方案

使用Feign来调用Get请求时,如果方法的参数是一个对象,则会被强行转变成Post请求,然后抛出服务被拒绝的错误。

具体原因就不说了,其他博客解释的很清楚。也给出方案,使用apache httpclient替换jdk UrlConnection的解决方案尝试过后并没有成功。

随后就发现了这个注解

@SpringQueryMap

这是spring cloud新增的一个注解, @SpringQueryMap 可以用来修饰pojo类,达到使用对象传递参数的需求。使用方法如下:

/**
 * @Description
 * @param requestVideoAuth
 * @date 2019/4/10 11:33
 * @version V1.0.0
 */
@GetMapping(value = "/feign/upload",produces = "application/json; charset=utf-8")
Result uploadVideoAuth(@SpringQueryMap RequestVideoAuth requestVideoAuth);

在feign接口参数声明之前添加 @SpringQueryMap即可。

但紧接着会发现另外一个问题,当你的参数对象是有父类的时候,你会发现父类的属性是没有被映射过来的,只传递了对象本身的属性值。

对于这个问题github上也给出了解决方案:添加feign配置类

@Configuration
public class FeignConfiguration {

    /**
     * @Description 
     * @date 2019/5/21 17:27
     * @version V1.0.0
     */
    @Bean
    Logger.Level feignLoggerLevel() {
        //这里记录所有,根据实际情况选择合适的日志level
        return Logger.Level.FULL;
    }

    /**
     * @Description 替换解析queryMap的类,实现父类中变量的映射
     * @date 2019/5/21 16:59
     * @version V1.0.0
     */
    @Bean
    public Feign.Builder feignBuilder() {
        return Feign.builder()
                .queryMapEncoder(new BeanQueryMapEncoder())
                .retryer(Retryer.NEVER_RETRY);
    }
}

 然后在FeignClient上去配置即可。

@FeignClient(value = "springcloudapi",configuration = FeignConfiguration.class)
public interface FeignVodService {}

至此,使用Feign的方式在Get请求中使用有继承关系的对象当做参数接收也是没有问题的了。 

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值