Solon 3.0 新特性:HttpUtils 瞭解一下

带刺的坐椅發表於2024-10-15

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 介面規範;已適配的序列化外掛可直接用)
  • 支援泛型

相關文章