今日目標
使用 Java 21 內建的現代化 HttpClient,將昨天透過 Thymeleaf 動態渲染出來的 HTML 字串,以 Multipart/form-data 格式送往 Gotenberg 轉檔微服務,並成功在記憶體中取得產出的 PDF 位元陣列(Byte Array)。
核心概念:微服務之間的優雅對話
在前幾天的進度中,我們完成了兩件大事:
今天要將這兩者「串起來」!
我們不需要在 Java 伺服器安裝任何複雜的繪圖套件。只需要透過 HTTP 請求,把 HTML 當作檔案(index.html)包裹在 Multipart 請求中發送給 Gotenberg(網址:http://localhost:3000/forms/chromium/convert/html),Gotenberg 內的 Chromium 就會在毫秒內將其渲染成完美的 PDF,並透過 Response 回傳給我們。
實作重點
Java 21 現代化 HttpClient 運用:
不需依賴肥大的外部 HTTP 套件,直接使用 Java 21 內建且高效的 HttpClient 與 HttpRequest 來發送請求。
手動構建 Multipart/form-data 請求:
將 Thymeleaf 產出的 HTML 字串包裝成名為 index.html 的檔案欄位,並加上亂數產生的 boundary 分隔符號,精準送往 Gotenberg 的 Chromium 轉檔端點。
二進位資料流(Byte Array)與檔案下載回應:
接收 Gotenberg 回傳的 PDF 二進位資料(byte[]),透過 Spring 的 HttpHeaders 設定內容類型與 attachment 屬性,讓瀏覽器自動將其識別為 PDF 檔案進行下載。
心得
今日實作雖遇到了Docker 容器未啟動導致連線失敗,而且還不小心混淆預覽端點與下載端點,但最後瀏覽器成功自動開始下載名為 Health_Report_1.pdf 的檔案!這代表我們跨越了「前後端與微服務容器」的高牆,完成了整套系統最核心的報表產出管線。
接下來的 Phase 3(Day 13 - Day 17),我們要進入 資安防護:使用 Apache PDFBox 對這份 PDF 進行 128-bit 動態密碼加密,讓報告真正達到醫療級的資安合規標準!我們明天見!