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两种渲染方式,它的优点是在客户端动态生成,减轻了服 ...
随机推荐
- 代码审计中的CSRF
0x00 背景 CSRF漏洞中文名为“跨站请求伪造”,英文别名为“one-click-attack”.从字面上我们就可以看出,这是一种劫持其他用户进行非法请求的攻击方式,主要用于越权操作,与XSS相比 ...
- springboot整合mybatis报错:Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation...
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis- ...
- mongo rename collection
db.getCollection('a').renameCollection("b"); db.getCollection('a').find({}, {_id: 0}).forE ...
- EMCCD
EMCCD 即电子倍增CCD,是探测领域内灵敏度极高的一种高端光电探测产品. 在光子探测领域的应用发展对探测器灵敏度的要求不断提高,EMCCD (Electron-Multiplying CCD)技术 ...
- linux下使用过的命令总结(未整理完)
1.常用命令不需解释 ls\cd\cp\mv\pwd\file\vi\vim\cat 2.getconf LONG_BIT 终端返回32表示操作系统32位,返回64表示操作系统64位. 3.ifcon ...
- python--防止SQL注入
from pymysql import * def main(): # 创建Connextion连接 conn = connect(host='localhost', port=3306, user= ...
- sql语句查询成绩表各科前三名
--语法形式: ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) --解释: 根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示 ...
- 反编译.net下的exe程序
1. 什么叫.net平台 .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境..NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的 ...
- MyBatis学习笔记一:MyBatis最简单的环境搭建
MyBatis的最简单环境的搭建,使用xml配置,用来理解后面的复杂配置做基础 1.环境目录树(导入mybatis-3.4.1.jar包即可,这里是为后面的环境最准备使用了web项目,如果只是做 my ...
- 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
JPDA 概述 所有的程序员都会遇到 bug,对于运行态的错误,我们往往需要一些方法来观察和测试运行态中的环境.在 Java 程序中,最简单的,您是否尝试过使用 System.out.println( ...