> Linux新闻 >

Solon 3.0 新特性:HttpUtils 了解一下

Solon 3.0 引入一个叫 HttpUtils 小插件,这是一个简单的同步 HTTP 客户端,基于 URLConnection 适配(也支持切换为 OkHttp 适配)。使得编写 HTTP 客户端代码更加直观和易于阅读。

使用 URLConnection 适配时(大小为 40KB 左右)。默认
使用 OkHttp 适配时(大小为 3.1MB 左右)。当引入 okhttp 包时,自动切换为 okhttp 适配。
一、请求操作
HEAD 请求并返回 status code
int code = HttpUtils.http("http://localhost:8080/hello").head();
GET 请求并返回 body string
String body = HttpUtils.http("http://localhost:8080/hello").get();
GET 请求并返回 body as bean
//for Bean
Book book = HttpUtils.http("http://localhost:8080/book?bookId=1")
                     .getAs(Book.class);
二、提交操作
PUT、PATCH、DELETE 数据提交,与 POST 相同。

POST 请求并返回 body stirng (x-www-form-urlencoded)
//x-www-form-urlencoded
String body = HttpUtils.http("http://localhost:8080/hello")
                       .data("name","world")
                       .post();
POST 请求并返回 body stirng (form-data)
//form-data
String body = HttpUtils.http("http://localhost:8080/hello")
                       .data("name","world")
                       .post(true); // useMultipart
                      
                      
//form-data :: upload-file
String body = HttpUtils.http("http://localhost:8080/hello")
                       .data("name", new File("/data/demo.jpg"))
                       .post(true); // useMultipart
POST 请求并返回 body stirng (body-raw)
//body-json
String body = HttpUtils.http("http://localhost:8080/hello")
                       .bodyOfJson("{\"name\":\"world\"}")
                       .post();
POST 请求并返回 body as bean (body-raw)
//for Bean
Result body = HttpUtils.http("http://localhost:8080/book")
                       .bodyOfBean(book) //会通过 serializer 指定 contentType;默认为 json serializer
                       .postAs(Result.class);
                      
                      
//for Bean generic type
Result<User> body = HttpUtils.http("http://localhost:8080/book")
                       .bodyOfBean(book)
                       .postAs(new Result<User>(){}.getClass()); //通过临时类构建泛型(或别的方式)
三、高级操作
获取完整的响应(用完要关闭)

try(HttpResponse resp = HttpUtils.http("http://localhost:8080/hello").data("name","world").exec("POST")) {
    int code = resp.code();
    String head = resp.header("Demo-Header");
    String body = resp.bodyAsString();
    Books body = resp.bodyAsBean(Books.class);
}
配置序列化器。默认为 json,比如改为 fury;或者自己定义。

FuryBytesSerializer serializer = new FuryBytesSerializer();

Result body = HttpUtils.http("http://localhost:8080/book")
                       .serializer(serializer)
                       .bodyOfBean(book)
                       .postAs(Result.class);
四、总结
HttpUtils 的几个小优点:

简单的 API。主要就是简单!也很小巧。
支持自动序列化(使用了 solon serializer 接口规范;忆适配的序列化插件可直接用)
支持泛型



(责任编辑:IT)