Feign 客户端的使用 二
一、Feign的使用(客户端调用 json/xml格式的接口)
1.服务端接口编写
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-xml-provider</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "hello world";
} @RequestMapping(value = "/person/create", method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
public String createPerson(@RequestBody Person person) {
System.out.println(person.getName() + "~~~~~~~" +person.getAge());
return "success, id:" + person.getId();
} @RequestMapping(value = "/createXmlPerson/create", method = RequestMethod.POST,
produces = MediaType.APPLICATION_XML_VALUE,
consumes = MediaType.APPLICATION_XML_VALUE)
public String createXmlPerson(@RequestBody Person person) {
System.out.println(person.getName() + "~~~~~~~" +person.getAge());
return "<result><message>success</message></result>";
}
2.客户端编写
(1)导入jar包
<dependencies>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>9.5.0</version>
</dependency> <dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>9.5.0</version>
</dependency> <!--配置xml客户端-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-jaxb</artifactId>
<version>9.5.0</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency> <dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency> <!--httpclient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
</dependencies>
(2)编写客户端测试代码
public interface ClientInterface {
@RequestLine("GET /hello")
public String hello();
@RequestLine("GET /person/{id}")
public Person getPerson(@Param("id") Integer id);
@RequestLine("POST /person/create")
@Headers("Content-Type: application/json")
public String createPerson(Person person);
@RequestLine("POST /createXmlPerson/create")
@Headers("Content-Type: application/xml")
public Result createXmlPerson(Person person);
}
public static void main(String[] args) {
//hello
ClientInterface helloClient = Feign.builder().target(ClientInterface.class, "http://localhost:8080");
String hello = helloClient.hello();
System.out.println(hello);
//json 创建 Person
ClientInterface creatPersonInter = Feign.builder()
.encoder(new GsonEncoder())
.target(ClientInterface.class, "http://localhost:8080");
Person person = new Person();
person.setAge(18);
person.setId(1);
person.setName("admin");
String result = creatPersonInter.createPerson(person);
System.out.println("result:" + result);
//xml 创建 Person
JAXBContextFactory jaxbContextFactory = new JAXBContextFactory.Builder().build();
ClientInterface xmlClient = Feign.builder().encoder(new JAXBEncoder(jaxbContextFactory))
.decoder(new JAXBDecoder(jaxbContextFactory))
.target(ClientInterface.class, "http://localhost:8080/");
Person person1 = new Person();
person1.setAge(18);
person1.setId(1);
person1.setName("admin");
Result result2 = xmlClient.createXmlPerson(person1);
System.out.println("result:"+result2.getMessage());
}
二、自定义Feign客户端
1.编写myClient
import feign.Client;
import feign.Request;
import feign.Response;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collection;
import java.util.HashMap; public class MyClient implements Client {
@Override
public Response execute(Request request, Request.Options options) throws IOException {
try {
System.out.println("自定义的client"); //创建一个默认的客户端
CloseableHttpClient httpClient = HttpClients.createDefault(); //获取调用的http方法
final String method = request.method(); //创建一个HttpClient 的 HttpRequest
HttpRequestBase httpRequestBase = new HttpRequestBase() {
@Override
public String getMethod() {
return method;
}
}; //设置请求地址
httpRequestBase.setURI(new URI(request.url())); //执行请求,获取响应
HttpResponse httpResponse = httpClient.execute(httpRequestBase); //获取响应的内容
byte[] body = EntityUtils.toByteArray(httpResponse.getEntity()); //将HttpClient d的响应对象转换为Feign的Response
Response response = Response.builder()
.body(body)
.headers(new HashMap<String, Collection<String>>())
.status(httpResponse.getStatusLine().getStatusCode())
.build();
return response;
} catch (URISyntaxException e) {
e.printStackTrace();
}
return null;
}
}
2.编写MyClientTest测试
public static void main(String[] args) {
ClientInterface clientInterface = Feign.builder()
.client(new MyClient())
.target(ClientInterface.class, "http://localhost:8080");
String hello = clientInterface.hello();
System.out.println(hello);
}
Feign 客户端的使用 二的更多相关文章
- Spring Cloud之Feign客户端超时时间配置
关于雪崩效应: 默认情况下tomcat只有一个线程去处理客户端发送的所有请求.高并发情况下,如果客户端请求都在同一接口,tomcat的所有线程池去处理,导致其他接口服务访问不了,等待. Tomcat有 ...
- Spring Cloud之Feign客户端调用工具
feign介绍 Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用. Spring Cloud 支持 RestTemplate Fetin Feign客户端实际开发 ...
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- Feign 客户端调用错误
1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...
- Springcloud 整合Hystrix 断路器,支持Feign客户端调用
1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用 https://www.cnblogs.com/pickKnow/p/11 ...
- Feign客户端的重构,新建springcloud架构
1,在上篇博文中,已经实现了feign 客户端来远程调用接口的功能,因为feign 客户端在springcloud 开发过程中是比较常用的方式 https://www.cnblogs.com/pick ...
- Feign客户端实现RPC 调用
1,springcloud 中支持http调用的两种方式,RestTemplate,Feign客户端 2,Feign 客户端是一个声明式(注解方式)http 远程调用工具 3,实现方式如下: 第一步: ...
- WCF学习之旅—实现支持REST客户端应用(二十四)
WCF学习之旅—实现REST服务(二十二) WCF学习之旅—实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...
- Jquery.Qrcode在客户端动态生成二维码并添加自定义Logo
0 Jquery.Qrcode简介 Jquery.Qrcode.js是一个在浏览器端基于Jquery动态生成二维码的插件,支持Canvas和Table两种渲染方式,它的优点是在客户端动态生成,减轻了服 ...
随机推荐
- 吴裕雄--天生自然 JAVASCRIPT开发学习:对象 实例(3)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Linux 账号管理及ACL权限设置,PAM模块简介
有效群组与初始群组: groups:有效与支持群组的观察 newgrp:有效群组的切换,后面接群组名称 在passwd文件中记录的GID就是默认的GID,就是初始群组 /etc/passwd文件结构 ...
- PyCharm4.5 中文破解版破解步骤
1.在下载之家下载PyCharm4.5中文版软件包,然后右击软件安装包选择解压到“pycharm4.5.3”. 2.在解压文件夹中找到pycharm-professional-4.5.3,右击打开. ...
- Angular开发者指南(六)作用域
什么是作用域? 作用域是引用应用程序模型的对象. 它是表达式的执行上下文. 作用域以层次结构排列,模仿应用程序的DOM结构,它可以观察表达式和传播事件. 作用域的特征 Scope提供API($watc ...
- 遍历一个文件夹,打印出该文件夹下所有的py文件
import os def iterbrowse(path): for home, dirs, files in os.walk(path): for filename in files: yield ...
- python练习题——猜数字游戏
增加了按照对半找数的方法来计算最短几次就可以猜到随机数,决定到游戏结束共猜数的次数: from random import * import numpy as np from numpy import ...
- rancher2.0快速入门
注意:本入门指南的目的是让您快速的运行一个Rancher2.0环境,它不适用于生产.有关更全面的说明,请查阅Rancher安装. 本教程将指导您完成: 安装Rancher v2.0 : 创建第一个集群 ...
- html中的select下拉框
<select name="effective"> <option value="">请选择</option> <op ...
- 从Note 5看三星大招 究竟能不能秒杀iPhone
5看三星大招 究竟能不能秒杀iPhone" title="从Note 5看三星大招 究竟能不能秒杀iPhone"> 从当年HTC发布第一代Android手机G1开始 ...
- hexo创建新文章的正确方法
起因 之前我一直是通过复制以前的文章的形式来创建一个新的文档,但是这一次似乎遇到了一些问题.我将文章写完之后,准备进行预览,输入hexo s命令.在预览页面却没有显示出新的文章,还是和之前的页面是一样 ...