JavaDemo——Feign轻量级接口式http客户端

Feign是java的轻量级http客户端,通过注解和接口就能快速实现http客户端,方便快捷;

官方git地址:OpenFeign/feign: Feign makes writing java http clients easier (github.com)

Feign集成的功能挺多的,这是官网的展示图:

简单使用

maven导入feign基本库:

	<dependency>
	    <groupId>io.github.openfeign</groupId>
	    <artifactId>feign-core</artifactId>
	    <version>13.3</version>
	</dependency>

先准备一个测试用的http服务端:

package test;


import java.io.IOException;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class MyHttpServer {

	public static void main(String[] args) {
		try {
			HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
			server.createContext("/testget", new MyHttpHandler());
			server.createContext("/testpost", new MyHttpHandler2());
			System.out.println("http server start");
			server.start();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

class MyHttpHandler implements HttpHandler {

	@Override
	public void handle(HttpExchange exchange) throws IOException {
		System.out.println("GETuri:" + exchange.getRequestURI());
		exchange.getRequestHeaders().entrySet().forEach(x -> {System.out.println("Header:" + x);});
		exchange.sendResponseHeaders(200, 0);
		exchange.getResponseBody().write("hello world".getBytes());
		exchange.close();
		System.out.println();
	}
	
}

class MyHttpHandler2 implements HttpHandler{

	@Override
	public void handle(HttpExchange exchange) throws IOException {
		System.out.println("POSTuri:" + exchange.getRequestURI());
		exchange.getRequestHeaders().entrySet().forEach(x -> {System.out.println("Header:" + x);});
		byte[] body = exchange.getRequestBody().readAllBytes();
		System.out.println("body:" + new String(body));
		exchange.sendResponseHeaders(200, 0);
		exchange.getResponseBody().write("{\"name\":\"Jack\", \"age\":13}".getBytes());
		exchange.close();
		System.out.println();
	}
	
}

简单测试demo:

使用注解和接口定义http请求:

package test;

import feign.Body;
import feign.Param;
import feign.RequestLine;

public interface MyHttpClient {

	@RequestLine("GET /testget?key={key}")
	String test1(@Param("key")String k);
	
	@RequestLine("POST /testpost?str={x}")
	@Body("hello {x}")
	String test2(@Param("x")String str);
	
}

调用代码,使用Feign.builder()创建客户端,target()指定接口和base url:

package test;

import feign.Feign;

public class Test {

	public static void main(String[] args) {
		System.out.println("start");
		MyHttpClient client = Feign.builder()
				.target(MyHttpClient.class, "http://127.0.0.1:8080");
		String res = client.test1("test");
		System.out.println(res);
		
		System.out.println(client.test2("Tom"));
	}

}

启动http服务端,再启动测试feign客户端:

服务端打印:

客户端打印:

日志模块

还可以通过Feign的builder设置连接超时读取超时和日志模块:

		MyHttpClient client = Feign.builder()
				.options(new Request.Options(5, TimeUnit.SECONDS, 10, TimeUnit.SECONDS, true))
				.logger(new Logger.JavaLogger("MyLog").appendToFile("logs/my.log"))
				.logLevel(Logger.Level.FULL)
				.target(MyHttpClient.class, "http://127.0.0.1:8080");

这个用的是自带的JavaLogger日志模块,需要注意设置日志文件的路径文件夹需要先创建好才可以,也可以使用例如slf4j日志模块,不过就需要maven导入对应模块了,feign有很多模块可以导入,基础模块就是feign-core,还有其他例如:feign-jackson、feign-okhttp、feign-slf4j、feign-httpclient、feign-gson

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值