Forest v1.5.8 版本发布,轻量级 HTTP 客户端框架
v1.5.8 版本发布,该版本主要解决以下BUG: fix: 使用@DownloadFile下载文件时,在某些环境下会发送阻塞 (#I4DLBI:使用@DownloadFile下载文件,在某些环境下会发送阻塞) fix: response对google protobuf包依赖 (#I4DKQW:forest-spring-boot-starter 1.5.6缺少protobuf-java的jar包) 项目介绍: Forest是一个高层的、极简的轻量级HTTP调用API框架。 相比于直接使用Httpclient您不再用写一大堆重复的代码了,而是像调用本地方法一样去发送HTTP请求。 文档和示例: 项目主页 中文文档 JavaDoc Demo工程 Forest有哪些特性? 以Httpclient和OkHttp为后端框架 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦 因为针对第三方接口,所以不需要依赖Spring Cloud和任何注册中心 支持所有请求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH 支持文件上传和下载 支持灵活的模板表达式 支持拦截器处理请求的各个生命周期 支持自定义注解 支持OAuth2验证 支持过滤器来过滤传入的数据 基于注解、配置化的方式定义Http请求 支持Spring和Springboot集成 JSON格式数据序列化和反序列化 XML格式数据序列化和反序列化 Protobuf格式数据序列化和反序列化 JSON、XML或其他类型转换器可以随意扩展和替换 支持JSON转换框架: Fastjson, Jackson, Gson 支持JAXB形式的XML转换 可以通过OnSuccess和OnError接口参数实现请求结果的回调 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义 支持异步请求调用 发送JSON数据 /** * 将对象参数解析为JSON字符串,并放在请求的Body进行传输 */ @Post("/register") String registerUser(@JSONBody MyUser user); /** * 将Map类型参数解析为JSON字符串,并放在请求的Body进行传输 */ @Post("/test/json") String postJsonMap(@JSONBody Map mapObj); /** * 直接传入一个JSON字符串,并放在请求的Body进行传输 */ @Post("/test/json") String postJsonText(@JSONBody String jsonText); 发送XML数据 /** * 将一个通过JAXB注解修饰过的类型对象解析为XML字符串 * 并放在请求的Body进行传输 */ @Post("/message") String sendXmlMessage(@XMLBody MyMessage message); /** * 直接传入一个XML字符串,并放在请求的Body进行传输 */ @Post("/test/xml") String postXmlBodyString(@XMLBody String xml); 发送Protobuf数据 /** * ProtobufProto.MyMessage 为 Protobuf 生成的数据类 * 将 Protobuf 生成的数据对象转换为 Protobuf 格式的字节流 * 并放在请求的Body进行传输 * * 注: 需要引入 google protobuf 依赖 */ @Post(url = "/message", contentType = "application/octet-stream") String sendProtobufMessage(@ProtobufBody ProtobufProto.MyMessage message); 文件上传 /** * 用@DataFile注解修饰要上传的参数对象 * OnProgress参数为监听上传进度的回调函数 */ @Post("/upload") Map upload(@DataFile("file") String filePath, OnProgress onProgress); 可以用一个方法加Lambda同时解决文件上传和上传的进度监听 Map result = myClient.upload("D:\\TestUpload\\xxx.jpg", progress -> { System.out.println("progress: " + Math.round(progress.getRate() * 100) + "%"); // 已上传百分比 if (progress.isDone()) { // 是否上传完成 System.out.println("-------- Upload Completed! --------"); } }); 基本签名验证 @Post("/hello/user?username=${username}") @BasicAuth(username = "${username}", password = "bar") String send(@DataVariable("username") String username);