说明:
- 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注入服务接口。
- 服务接口:定义业务逻辑的契约。
- 服务实现类:实现具体的业务逻辑。
通过这种方式,代码结构更加清晰,便于扩展和维护。你可以在此基础上进一步扩展功能,例如添加数据库支持、日志记录等。