【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.rhkb.cn/news/33773.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第158天

回顾和今天的计划 我们在这里会实时编码一个完整的游戏,没有使用引擎或库,一切都由我们自己做所有的编程工作,游戏中的每一部分,无论需要做什么,我们都亲自实现,并展示如何完成这些任务。今天,…

指令微调 (Instruction Tuning) 与 Prompt 工程

引言 预训练语言模型 (PLMs) 在通用语言能力方面展现出强大的潜力。然而,如何有效地引导 PLMs 遵循人类指令, 并输出符合人类意图的响应, 成为释放 PLMs 价值的关键挑战。 指令微调 (Instruction Tuning) 和 Prompt 工程 (Prompt Engineerin…

实验三 Python 数据可视化 Python 聚类-K-means(CQUPT)

一、实验目的 Python 数据可视化: 1、学习使用 jieba、wordcloud 等类库生成词云图。 2、学习使用 Matplotlib 库进行数据可视化。 Python 聚类-K-means: 1、理解聚类非监督学习方法的基本原理。 2、掌握 Python、numpy、pandas、sklearn 实现聚类…

Linux--git

ok,我们今天来学习如何在Linux上建立链接git 版本控制器Git 不知道你⼯作或学习时,有没有遇到这样的情况:我们在编写各种⽂档时,为了防⽌⽂档丢失,更改 失误,失误后能恢复到原来的版本,不得不…

凸优化算法学习笔记:决策单调性与 wqs二分

文章目录 前言决策单调性单调矩阵,完全单调矩阵,蒙日阵决策单调性优化 d p dp dp线性 d p dp dp分治(离线)二分队列(在线)SMAWK 区间 d p dp dp 练习题LOJ6039 w q s wqs wqs 二分(蒙日阵最短…

基于YOLOv8深度学习的PCB缺陷检测识别系统【python源码+GUI界面+数据集+训练代码】

目录 一、界面功能展示 二、前言摘要 三、GUI界面演示 (一)用户加载自定义模型 (二)单张图像检测 (三)检测图像文件夹 (四)检测视频 (五)保存 四、模…

Matlab 多项式拟合点法线(二维)

文章目录 一、简介二、实现代码三、实现效果一、简介 这个思路其实很简单,假设我们有一组曲线点,我们可以对其拟合曲线并计算其导数来获取每个点的法向量,当然这一思路也可以扩展至三维。具体过程如下所示: 二、实现代码 %% *********

Cesium 入门教程(基于 vue3)

目录 Cesium 介绍: 下载 Cesium,2种路径: 下载成功后,创建 vue3 项目: 编写内容 一个“纯”地球 添加图层 坐标系及其数值转换 相机位置及动态交互 添加物体和3维建筑物 Cesium 介绍: Cesium 是一个开源的 JavaScript …

力扣——合并K个排序链表

题目链接: 链接 题目描述: 思路: 同步合并 已知顺序排列,每个链表的node比较再加进结果,用优先队列方便比较node,可以先把每个链表的头结点加进队列,然后队列头出,出来的头还有n…

可复用表格组件设计与实现:分页、排序、筛选全功能解析

文章目录 一、组件设计思路1.1 功能需求分析1.2 技术选型 二、组件架构设计2.1 组件结构2.2 数据流设计 三、核心代码实现3.1 基础表格组件3.2 状态管理 四、功能模块实现4.1 分页组件4.2 排序控制4.3 筛选控制 五、性能优化方案5.1 虚拟滚动5.2 防抖筛选 六、完整测试方案6.1 …

Unity屏幕适配——立项时设置

项目类型:2D游戏、竖屏、URP 其他类型,部分原理类似。 1、确定设计分辨率:750*1334 为什么是它? 因为它是 iphone8 的尺寸,宽高比适中。 方便后续适配到真机的 “更长屏” 或 “更宽屏” 2、在场景…

PawSQL for TDSQL:腾讯云TDSQL数据库性能优化全攻略

TDSQL 作为腾讯云推出的分布式数据库,凭借其高扩展性、高可用性和高性能等优势,广泛应用于金融、互联网、政务等领域。随着业务的不断增长和数据量的爆炸式增长,如何优化 TDSQL 数据库的性能,成为众多企业和开发者面临的挑战。本文…

机器学习(七)

一,监督学习和无监督学习聚类的数据集比较: 监督学习: 数据集包括输入的数据和与之对应的标签 无监督学习: 数据集仅含有输入的数据,要求算法自己通过所给的数据集来确定决策边界 二,聚类(Clustering): 聚…

海鲜水产行业wordpress外贸主题

模板采用清新的海洋风格设计,完美契合水产和海鲜行业的特点,让您的网站在众多竞争者中脱颖而出。 高质量的图片展示区域,让您可以展示新鲜捕捞的海鲜产品,吸引客户的注意力。 多功能性,满足业务需求: 模…

调优案例一:堆空间扩容提升吞吐量实战记录

📝 调优案例一:堆空间扩容提升吞吐量实战记录 🔧 调优策略:堆空间扩容三部曲 # 原配置(30MB堆空间) export CATALINA_OPTS"$CATALINA_OPTS -Xms30m -Xmx30m"# 新配置(扩容至120MB&am…

【大模型系列】llama.cpp本地运行大模型

上一篇链接: 【大模型系列】使用ollama本地运行千问2.5模型 我们讲了ollama本地运行大模型,这里我们介绍另一种本地运行大模型的方法:llamacpp 软件下载 下载地址:https://github.com/ggml-org/llama.cpp/releases 下载cpu版本的llamacpp&a…

maven之自定义插件

写在前面 在使用maven肯定是离不开插件的,比如执行mvn clean或者时mvn compile其实运行的就是绑定的默认插件。虽然我们一般不需要来自定义插件,但是为了使用的过程中更加的清晰,来尝试自定义插件还是很有必要的,所以本文就一起来…

工程实践:如何使用SU17无人机来实现室内巡检任务

阿木实验室最近发布了科研开发者版本的无人机SU17,该无人机上集成了四目视觉,三维激光雷达,云台吊舱,高算力的机载计算机,是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…

【瞎折腾/Dify】使用docker离线部署Dify

文章目录 说在前面安装Docker(外网)获取Dify源码(外网)拉取docker镜像(外网)导出镜像(内网)导入镜像(内网)运行问题 说在前面 外网操作系统:windows内网操作系统:ubuntu外网docker desktop版本:4.29.0外网docker版本:version 26.0…

【Git】配置Git

配置Git 忽略特殊文件 在日常开发中,有些文件不想或不应该提交到远端,如保存数据库密码的配置文件。 在Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件。 不需要从头写.gi…