Feign-编写支持Http连接案例

一)替换Customer到Provider之间的连接工具为HttpClient

1.HttpURLConnection和HttpClient的区别
1)HttpClient在进行传递对象类型的时候要指定传递的参数的是JSON格式而HttpURLConnection则不需要。
2)HttpClient支持GET方式的对象传递,HttpURLConnection不支持GET方式请求参数的传递。
3)HttpClient支持池连接的Http请求,HttpURLConnection是不支持的,

二)使用HttpClient在Customer和Provider之间的请求

注意所有的操作都是的Customer中进行修饰的。

1.在文件内添加依赖包

<!--添加的HttpClient的坐标-->
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>
<!--        添加Feign支持的HttpClient的jar包-->
<dependency>
    <groupId>com.netflix.feign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>8.18.0</version>
</dependency>

2.在全局配置文件内添加的启动HttpClient连接的方式

#开启使用的HttpClient工具进行请求
feign:
  httpclient:
    enabled: true

3.编写测试的代码(添加服务API)

/**
 * 使用HttpClient请求的时候传递对象必须要指定传递参数的格式为的JSON不然无法赋值
 * @param product
 * @return
 */
@PostMapping(value = "/add3",consumes = MediaType.APPLICATION_JSON_VALUE)
public  Product addProduct3(@RequestBody Product product);

/**
 * @param null
 * @description: 使用GET方式进行对象的传递
 * @return:
 * @author: shinelon
 * @time: 2019/9/3:9:40
 */
@GetMapping(value = "/add4")
public Product addProduct4(@RequestBody Product product);

4.Provider实现方法

@Override
public Product addProduct3(@RequestBody Product product)
{
    return product;
}

/**
 * @param null
 * @description:注意请求一定要加上RequestBody注解不然值为null
 * @return:
 * @author: shinelon
 * @time: 2019/9/3:9:41
 */
@Override
public Product addProduct4(@RequestBody  Product product)
{
    return product;
}

5.Customer消费Provider服务

/**
 * @param null
 * @description:POST对象请求
 * @return:
 * @author: shinelon
 * @time: 2019/9/3:9:48
 */
@GetMapping(value = "/add3")
public Product addProduct3(Product product){
    return  this.productCustomerService.addProduct3(product);
}


/**
 * @param null
 * @description:GET对象请求
 * @return:
 * @author: shinelon
 * @time: 2019/9/3:9:48
 */
@GetMapping(value = "/add4")
public Product addProduct4(Product product){
    return  this.productCustomerService.addProduct4(product);
}

6.测试

遇到的异常,因为的查看源码得知,openfeign在接受返回值时调用的不是httpclient的feign-core包的代码而是调用的本身的feign-core的代码,而本身的feign-core包中的Response类没有create方法。
得知原因后我将httpclient的依赖在pom文件中的位置上移,使openfeign优先调用httpclient的feign-core包的代码,结果在启动项目时就请求响应回来的,报错信息为:

在这里插入图片描述

解决方法将feign-HttpClient更换为如下依赖

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>10.1.0</version>
</dependency>

异常消除正常返回结果

在这里插入图片描述

POST请求传递对象参数

在这里插入图片描述

GET请求传递对象参数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值