【Quarkus】通過Quarkus集成后端服務示例

說明:

  1. REST資源接口AuthResource)。
  2. REST資源實現類AuthResourceImpl)。
  3. 服務接口AuthService)。
  4. 服務實現類AuthServiceImpl)。
  5. 配置文件application.properties)。
  6. 測試類AuthResourceTest)。

1. 項目結構

my-quarkus-app/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── AuthResource.java       # REST資源接口
│   │   │           ├── AuthResourceImpl.java   # REST資源實現類
│   │   │           ├── AuthService.java       # 服務接口
│   │   │           ├── AuthServiceImpl.java   # 服務實現類
│   │   ├── resources/
│   │   │   └── application.properties         # 配置文件
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           └── AuthResourceTest.java  # 測試類
├── pom.xml                                    # Maven配置文件
└── README.md                                  # 項目說明文件

2. 代碼實現

(1) AuthResource.java(REST資源接口)
package com.example;import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;@Path("/auth")  // 定義接口的基礎路徑
public interface AuthResource {@POST@Path("/validate")  // 定義接口的具體路徑@Consumes(MediaType.APPLICATION_FORM_URLENCODED)  // 接受表單數據@Produces(MediaType.APPLICATION_JSON)  // 返回JSON格式的數據boolean validateUser(@FormParam("uid") String uid,  // 從表單中獲取uid@FormParam("password") String password  // 從表單中獲取password);
}

(2) AuthResourceImpl.java(REST資源實現類)
package com.example;import jakarta.inject.Inject;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.*;@ApplicationScoped  // 聲明為CDI Bean
public class AuthResourceImpl implements AuthResource {@InjectAuthService authService;  // 注入AuthService接口@Overridepublic boolean validateUser(String uid, String password) {return authService.validateUser(uid, password);  // 調用服務接口的方法}
}

(3) AuthService.java(服務接口)
package com.example;public interface AuthService {boolean validateUser(String uid, String password);  // 定義驗證方法
}

(4) AuthServiceImpl.java(服務實現類)
package com.example;import jakarta.enterprise.context.ApplicationScoped;@ApplicationScoped  // 聲明為CDI Bean
public class AuthServiceImpl implements AuthService {@Overridepublic boolean validateUser(String uid, String password) {// 簡單的驗證邏輯(示例)return "admin".equals(uid) && "password123".equals(password);}
}

(5) application.properties(配置文件)
# 配置Quarkus應用的HTTP端口
quarkus.http.port=8080

(6) AuthResourceTest.java(測試類)
package com.example;import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;@QuarkusTest
public class AuthResourceTest {@Testpublic void testValidateUser_Success() {given().formParam("uid", "admin").formParam("password", "password123").when().post("/auth/validate").then().statusCode(200).body(is("true"));  // 驗證返回值為true}@Testpublic void testValidateUser_Failure() {given().formParam("uid", "user").formParam("password", "wrongpassword").when().post("/auth/validate").then().statusCode(200).body(is("false"));  // 驗證返回值為false}
}

3. 運行項目

(1) 啟動開發模式

在項目根目錄下運行以下命令啟動Quarkus開發模式:

./mvnw quarkus:dev
(2) 訪問接口

使用curl或Postman等工具測試接口。

  • 驗證成功

    curl -X POST http://localhost:8080/auth/validate \-d "uid=admin" \-d "password=password123"
    

    返回結果:

    true
    
  • 驗證失敗

    curl -X POST http://localhost:8080/auth/validate \-d "uid=user" \-d "password=wrongpassword"
    

    返回結果:

    false
    

4. 運行測試

在項目根目錄下運行以下命令執行測試:

./mvnw test

測試結果:

  • testValidateUser_Success:驗證成功,返回true
  • testValidateUser_Failure:驗證失敗,返回false

5. 打包和運行

(1) 打包項目
./mvnw package
(2) 運行打包后的應用
java -jar target/quarkus-app/quarkus-run.jar

6. 總結

這個示例展示了如何在Quarkus中實現更清晰的分層架構:

  • REST資源接口:定義REST接口的契約。
  • REST資源實現類:實現REST接口的具體邏輯,并通過CDI注入服務接口。
  • 服務接口:定義業務邏輯的契約。
  • 服務實現類:實現具體的業務邏輯。

通過這種方式,代碼結構更加清晰,便于擴展和維護。你可以在此基礎上進一步擴展功能,例如添加數據庫支持、日志記錄等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72307.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

硬件驅動——51單片機:獨立按鍵、中斷、定時器/計數器

目錄 一、獨立按鍵 1.原理 2.封裝函數 3.按鍵控制點燈 數碼管 二、中斷 1.原理 2.步驟 3.中斷寄存器IE 4.控制寄存器TCON 5.打開外部中斷0和1 三、定時器/計數器 1.原理 2.控制寄存器TCON 3.工作模式寄存器TMOD 4.按鍵控制頻率的動態閃爍 一、獨立按鍵 1…

基于PMU的14節點、30節點電力系統狀態估計MATLAB程序

“電氣仔推送”獲得資料(專享優惠) 程序簡介: 程序采用三種方法對14節點和30節點電力系統狀態進行評估: ①PMU同步向量測量單元結合加權最小二乘法(WLS)分析電力系統的電壓幅值和相角狀態; …

Apifox Helper 自動生成API接口文檔

在我們開發過程中我們在編寫請求地址和編寫請求參數的時候特別花費時間耗費了我們很多時間,作為一個程序員,更應該把精力時間集中在開發上, Apifox Helper 是 Apifox 團隊針對 IntelliJ IDEA 環境所推出的插件,可以在 IDEA 環境中…

Python 3.13實現數據未來預測功能(詳細功能實現及環境搭建)

目錄 摘要 1. 導入所需庫 2. 加載和查看數據 3. 數據預處理 4. 拆分數據集 5. 模型訓練 6. 模型評估 7. 進行預測 結論 摘要 本文將引導您使用Python 3.13實現數據預測功能。我們將使用常用的Python庫, 如pandas、numpy和sklearn,來幫助讀者快速搭建一個簡…

基于Redis實現限流的幾種方式

限流盡可能在滿足需求的情況下越簡單越好! 分布式限流是指在分布式系統中對請求進行限制,以防止系統過載或濫用資源。以下是常見的分布式限流策略及其實現方式: 1、基于 Redis 的固定窗口限流 原理: 設定一個時間窗口&#xff0…

【前端文件下載實現:多種表格導出方案的技術解析】

前端文件下載實現:多種表格導出方案的技術解析 背景介紹 在企業級應用中,數據導出是一個常見需求,特別是表格數據的導出。在我們的管理系統中,不僅需要支持用戶數據的Excel導出,還需要處理多種格式的表格文件下載&am…

堆概念和結構

1. 二叉樹的順序結構 普通的二叉樹是不適合用數組來存儲的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結構存儲。現實中通常 把堆使用順序結構的數組來存儲 ,需要注意的是這里的堆和操作系統虛擬進程地址空間中的堆是兩回事&#xff0c…

VUE的腳手架搭建引入類庫

VUE的小白腳手架搭建 真的好久好久自己沒有發布自己博客了,對于一直在做后端開發的我 ,由于社會卷啊卷只好學習下怎么搭建前端,一起學習成長吧~哈哈哈(最終目的,能夠懂并簡易開發) 文章目錄 VUE的小白腳手架搭建1.下載node.js2.安裝vue腳手架3.創建一個項目4.代碼規范約束配置(…

使用 Arduino 和 ThingSpeak 通過互聯網進行實時溫度和濕度監測

使用 ThingSpeak 和 Arduino 通過 Internet 進行溫度和濕度監控 濕度和溫度是許多地方(如農場、溫室、醫療、工業家庭和辦公室)非常常見的測量參數。我們已經介紹了使用 Arduino 進行濕度和溫度測量,并在 LCD 上顯示數據。 在這個物聯網項目中,我們將使用ThingSpeak在互聯…

論文分享:PL-ALF框架實現無人機低紋理環境自主飛行

在室內倉庫、地下隧道等低紋理復雜場景中,無人機依賴視覺傳感器進行自主飛行時,往往會遇到定位精度低、路徑規劃不穩定等難題。針對這一問題,重慶郵電大學計算機學院雷大江教授團隊在IEEE Trans期刊上提出了一種新型自主飛行框架:…

[Java實戰]性能優化qps從1萬到3萬

一、問題背景 ? 事情起因是項目上springboot項目提供的tps達不到客戶要求,除了增加服務器提高tps之外,作為團隊的技術總監,架構師,技術扛把子,本著我不入地獄誰入地獄的原則,決心從代碼上優化,讓客戶享受到飛一般的感覺。雖然大多數編程工作在寫下第一行代碼時已經完成…

如何篩選能實現共享自助健身房“靈活性”的物聯網框架?

共享自助健身房已經成為一種新興的健身方式,這種模式方便快捷,尤其適合i人健身愛好者,市場接受度還是挺好的。對于無人自助式的健身房要想實現靈活性,要挑選什么樣的物聯網框架呢? 1. 支持多種通信協議 共享自助健身…

【后端】【django】拋棄 Django 自帶用戶管理后,能否使用 `simple-jwt`?

拋棄 Django 自帶用戶管理后,能否使用 simple-jwt? 一、結論 是的,即使拋棄了 Django 自帶的用戶管理(AbstractUser 或 AbstractBaseUser),仍然可以使用 django-rest-framework-simplejwt(簡稱…

【量化科普】Correlation,相關性

【量化科普】Correlation,相關性 🚀量化軟件開通 🚀量化實戰教程 在量化投資領域,相關性(Correlation)是一個核心概念,用于衡量兩個變量之間的線性關系強度和方向。簡單來說,它告…

大數據學習(68)- Flink和Spark Streaming

🍋🍋大數據學習🍋🍋 🔥系列專欄: 👑哲學語錄: 用力所能及,改變世界。 💖如果覺得博主的文章還不錯的話,請點贊👍收藏??留言📝支持一…

MCU詳解:嵌入式系統的“智慧之心”

在現代電子設備中, MCU(Microcontroller Unit,微控制器)扮演著至關重要的角色。從智能家居到工業控制,從汽車電子到醫療設備,MCU以其小巧、低功耗和高集成度的特點,成為嵌入式系統的核心組件。 …

(鏈表)24. 兩兩交換鏈表中的節點

給你一個鏈表,兩兩交換其中相鄰的節點,并返回交換后鏈表的頭節點。你必須在不修改節點內部的值的情況下完成本題(即,只能進行節點交換)。 示例 1: 輸入:head [1,2,3,4] 輸出:[2,1,4…

吳恩達機器學習筆記復盤(三)Jupyter NoteBook

Jupyter NoteBook Jupyter是一個開源的交互式計算環境: 特點 交互式編程:支持以單元格為單位編寫和運行代碼,用戶可以實時看到代碼的執行結果,便于逐步調試和理解代碼邏輯。多語言支持:不僅支持Python,還…

【Linux】從互斥原理到C++ RAII封裝實踐

📢博客主頁:https://blog.csdn.net/2301_779549673 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正! 📢本文由 JohnKi 原創,首發于 CSDN🙉 📢未來很長&#…

微服務無狀態服務設計

微服務無狀態服務設計是構建高可用、高擴展性系統的核心方法。 一、核心設計原則 請求獨立性 每個請求必須攜帶完整的上下文信息,服務不依賴本地存儲的會話或用戶數據。例如用戶認證通過JWT傳遞所有必要信息,而非依賴服務端Session。 狀態外置化 將會話…