說明:
- REST資源接口(
AuthResource
)。 - REST資源實現類(
AuthResourceImpl
)。 - 服務接口(
AuthService
)。 - 服務實現類(
AuthServiceImpl
)。 - 配置文件(
application.properties
)。 - 測試類(
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注入服務接口。
- 服務接口:定義業務邏輯的契約。
- 服務實現類:實現具體的業務邏輯。
通過這種方式,代碼結構更加清晰,便于擴展和維護。你可以在此基礎上進一步擴展功能,例如添加數據庫支持、日志記錄等。