Quarkus - 发布JSON Restful服务

news2024/11/28 14:37:49

目标

    基于实现第一个Hello World发布一个JSON的Restful服务,该服务提供GET,POST,DELETE三个接口,分别是获取水果列表添加水果根据水果名字删除水果

发布Rest服务

POM配置

添加jackson扩展的依赖

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
</dependency>

Quarkus也支持JSON-B,如果你喜欢JSON-B而不是Jackson,可以添加JSON-B的maven配置,如下:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-resteasy-reactive-jsonb</artifactId>
</dependency>

代码开发

我们将创建一个应用程序来管理一个水果列表。

首先,让我们做一个Fruit javabean,如下所示:

public class Fruit {

    private String name;

    private String description;

    public Fruit() {}

    public Fruit(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

这是非常简单的。需要注意的重要一点是,JSON 序列化层需要具有默认构造函数。

接下来创建一个FruitResouce类来发布Restful接口,代码如下:

@Path("/fruits")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class FruitResource {

    public List<Fruit> fruits = new ArrayList<>();

    public FruitResource() {
        fruits.add(new Fruit("Apple", "苹果"));
        fruits.add(new Fruit("Orange", "桔子"));
    }

    @GET
    public List<Fruit> list() {
        return fruits;
    }

    @POST
    public List<Fruit> add(Fruit fruit) {
        fruits.add(fruit);
        return fruits;
    }

    @DELETE
    public List<Fruit> del(String name) {
        fruits.forEach(e -> {
            if (name.equals(e.getName())) {
                fruits.remove(e);
            }
        });
        return fruits;
    }
}

非常简单,你只需要使用JAX-RS注解来定义你的实现节点。

测试

GET

在这里插入图片描述

POST

在这里插入图片描述

DELETE

在这里插入图片描述

Reponse方式发布Restful接口

创建Animals

public class Animals {

    private String name;

    private String description;

    public Animals() {}

    public Animals(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

创建AnimalsResource

@Path("/animals")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class AnimalsResource {

    private final List<Animals> list = new ArrayList<>();

    public AnimalsResource() {
        list.add(new Animals("Cat", "猫"));
        list.add(new Animals("Dog", "狗"));
        list.add(new Animals("Pig", "猪"));
    }

    @GET
    public Response list() {
        return Response.ok(list).build();
    }
}

测试结果:

在这里插入图片描述

响应式编程

你可以使用响应式编程,Quarkus推荐使用MultiRESTEasy ReactiveMutiny集成,你的接口可以返回UniMulti实例,代码如下:

    @GET
    public Multi<List<Animals>> list() {
        return Multi.createFrom().item(list);
    }

    @GET
    @Path("/{index}")
    public Uni<Animals> getOne(Integer index) {
        return Uni.createFrom().item(list.get(index));
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oralce系列十八:Oracle RAC

Oracle RAC 1. Oracle RAC介绍1.1 基本概念1.2 Oracle RAC应用场景1.3 Oracle RAC的优缺点 2. Oracle RAC架构3. Oracle RAC 的安装 1. Oracle RAC介绍 1.1 基本概念 Oracle RAC&#xff08;Oracle Real Application Server Cluster&#xff09;是一种分布式数据库解决方案&a…

涂鸦T2-U开发板快速入门

文章目录 T2-U模组概述特性 1、环境搭建2、SDK下载3、编译3.1、 命令编译3.2、 命令编译清除3.3、 Wind-IDE 编译3.4、编译完成 4、下载4.1、 GUI工具4.2、Wind IDE一键下载 5、 运行 涂鸦 T2-U 开发板 是一款专为开发者打造的智能硬件产品原型开发板。它可与其他功能电路模组或…

App的回归测试,有什么高效的测试方法?

直接抛出观点&#xff1a;高效的测试方法当然有&#xff0c;那就是采用【接口自动化】。 为了系统阐述这个问题&#xff0c;让你能有较强烈的获得感&#xff0c;本篇文章将采用下列结构进行展开&#xff1a; 1、回归测试&#xff0c;测哪些东西&#xff1f; 2、传统的回归测试…

容器认证有什么等级?考试内容是什么?

信息通信行业是进几十年新兴起的一个行业&#xff0c;对我们的生活产生了巨大的影响&#xff0c;传统的购物、出行方式发生了巨大的变化&#xff0c;而且我们的眼界更加开阔。可以了解到世界各地的风土人情&#xff0c;这一切都离不开信息通信技术的发展&#xff0c;同时市场为…

拥有Android开发经验? 走出焦虑圈,车载应用开发正好合适你!

行业前景 当前&#xff0c;车联网已成为智能交通的重要发展方向之一。车载Android应用可以为车辆提供智能化服务&#xff0c;帮助驾驶者增强车辆控制和安全&#xff0c;提供大量娱乐和信息服务&#xff0c;如导航、音乐、天气预报、电子地图等。而且&#xff0c;车联网相关政策…

为什么APP安全很重要?APP盾如何提供帮助?

为什么APP安全很重要&#xff1f; APP安全是流程、功能、控制、功能、最佳实践和工具的有效和高效组合&#xff0c;用于通过主动查找和保护各种漏洞来确保各类APP/软件的安全。 应用安全非常重要的4个主要原因 1.确保关键数据资产的安全 数据是新的石油&#xff0c;攻击者最…

抖音seo矩阵号源码开发分享(一)

抖音SEO矩阵系统源码开发&#xff0c;需要遵循一下步骤&#xff1a; 1. 确定需求和功能&#xff1a;明确系统的主要目标和需要实现的功能&#xff0c;包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构&#xff1a;根据需求和功能确定系…

运维圣经:DDos攻击应急响应指南

目录 DDos攻击简介 DDos攻击应急响应指南 一. 问题排查 二. 临时处置 三. 研判溯源 四. 清楚加固 DDos攻击简介 分布式拒绝服务是种基于DoS的特殊形式的拒绝服务攻击&#xff0c;是一种分布、 协作的大规模攻击方式&#xff0c;主要瞄准比较大的站点&#xff0c;像商业公…

MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC-自定义控件Edit control。MFC禁用中文输入法

0、直接说最终解决方法&#xff1a;MFC禁用中文输入法 #include <Imm.h> // Function for Disabling IME 禁用中文输入法 void DisableIME(HWND hWnd) {HIMC m_hImc; // 全局或者成员变量//HWND hWnd pWnd->GetDlgItem(IDC_EDIT1)->m_hWnd;if (hWnd &&am…

ffmpeg 编译android mac环境编译 或者centos

ndk版本:ndk21 (可使用android studio内部下载的ndk) /Users/XXXX/Library/Android/sdk/ndk/21.4.7075529 ffmpeg下载 ffmpeg6.0 1:git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2:或者直接点击下面按钮下载 http://ffmpeg.org/releases/ffmpeg-6.0.tar.xz 环…

极致呈现系列之:Echarts雷达图的魅力与价值

目录 什么是雷达图vue3中引入雷达图绘制简单的雷达图雷达图的数据处理什么是数据归一化处理对chartData的数据进行归一化将归一化后的数据应用到雷达图中 美化雷达图 什么是雷达图 雷达图是一种基于极坐标系的可视化图表&#xff0c;用于展示多维数据之间的关系。它通过设置不…

Cross-modal Moment Localization in Videos论文笔记

Cross-modal Moment Localization in Videos论文笔记 0.来源1.摘要2.介绍3.模型3.1语言-时间注意网络3.2损失函数3.2.1对齐损失3.2.2位置损失3.2.2损失函数 4.实验4.1数据集4.2性能比较4.3 ROLE的几种变体 5.未来工作 0.来源 2018年 Cross-modal Moment Localization in Video…

MFC-皮肤颜色集组合界面程序DlgSkinBase

虽然是小程序,编辑的源代码也很少&#xff0c;但其中的编程思想却是大型工程项目的配色经典基础。就如万丈高楼的基础中的钢筋般重要。 或者很多程序员一辈子也难接触到大型项目程序...还是那句话&#xff0c;既然缘分来了&#xff0c;不妨共享出来&#xff0c;希望能对有缘人有…

卖课软文怎么写,揭秘知识付费软文写作技巧

随着互联网的发展&#xff0c;知识付费已经成为了一种趋势。越来越多的人开始关注自我提升和职业发展&#xff0c;而知识付费也成为了他们获取知识和技能的重要途径。在这个背景下&#xff0c;卖课软文也成为了知识付费领域一种重要的推广方式。本文伯乐网络传媒将为大家揭秘卖…

hadoop本地化windows部署

文章目录 前言1. hadoop on windows1.1 安装jdk1.2 安装hadoop1.2.1 解压1.2.2 备用目录1.2.3 修改配置1.2.4 安装winutils-master1.2.5 格式化namenode1.2.6 启动hadoop1.2.7 web-ui登陆hadoop hdfs 2. spark on windows2.1 安装scala2.2 安装spark2.2.1 解压2.2.2 环境变量2.…

2年点工月薪10k,自学自动化年薪突破30W

我是农村出生的家庭&#xff0c;经济并不富裕&#xff0c;一个人奔波在大城市&#xff0c;总是很自卑。那段时间父亲身体不好&#xff0c;家里打电话说要花很多钱&#xff0c;于是我辞掉了一个月薪7k的功能测试&#xff0c;去了一个电子厂&#xff0c;每天加班加满月薪也能拿到…

【SpringCloud-3】Hystrix熔断器

通常情况下&#xff0c;一个请求可能会调用很多个服务。 如果下游某个服务异常&#xff0c;不能正常返回结果&#xff0c;导致上游所有服务等待&#xff0c;最终可能导致大量服务资源耗尽&#xff0c;造成雪崩。 说简单点&#xff0c;撸代码时&#xff0c;一定要保护好自己的服…

【vue3】vue3组件通信方式

一、props 可以实现父子组件通信&#xff0c;子组件通过defineProps获取父组件传递的数据&#xff0c;且在子组件内部不需要引入defineProps方法就可以直接使用&#xff01; 1、父组件给子组件传递数据 <Child hobby"学习" :money"money"></Chil…

Sui Builder House首尔站精彩集锦

6月3–4日&#xff0c;超过400人参加了Sui Builder House首尔站活动&#xff0c;近距离地了解了Sui网络的最新情况和路线图中提供的相关计划。作为主网推出后的第一个Builder House活动&#xff0c;参与者在现场体验了Sui的实现。 此次活动在首尔江南区举行&#xff0c;共设有…

分享一个玉质按钮

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>* {-webkit-box-sizing: border-box;-moz-box-sizing: border-box;bo…