当前位置: 首页 > article >正文

【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 {

    @Inject
    AuthService authService;  // 注入AuthService接口

    @Override
    public 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 {

    @Override
    public 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 {

    @Test
    public void testValidateUser_Success() {
        given()
            .formParam("uid", "admin")
            .formParam("password", "password123")
        .when()
            .post("/auth/validate")
        .then()
            .statusCode(200)
            .body(is("true"));  // 验证返回值为true
    }

    @Test
    public 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.kler.cn/a/585915.html

相关文章:

  • 【redis】zset 类型:基本命令(上)
  • 【网络通信安全】子专栏链接及简介
  • 【SpringMVC】常用注解:@RequestParam
  • 嵌入式硬件: GPIO与二极管基础知识详解
  • 【Java篇】一法不变,万象归一:方法封装与递归的思想之道
  • Opencv之掩码实现图片抠图
  • 全面剖析 Linux 进程管理与 PCB 机制
  • 编程自学指南:java程序设计开发,网络编程基础,TCP编程,UDP编程,HTTP客户端开发
  • 基于微信小程序的小区管理系统设计与实现【lw+源码+部署+视频+讲解】
  • 【树莓派Pico FreeRTOS编程】-FreeRTOS移植
  • 建筑管理(2): 施工承包模式,工程监理,质量监督
  • Java实现死锁
  • windows10 清理 C 盘
  • 如何利用互联网大数据进行产品创新
  • 【含文档+PPT+源码】基于微信小程序的驾考在线学习与测试系统的设计与实现
  • 安全中心建设关键技术之态势展示
  • 一窥DeepSeek开源EPLB项目:揭开技术背后的面纱
  • Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组
  • 如何安装旧版本的Pytorch
  • 部署达梦数据库到服务器