【Java编程】Jersey:一个简洁的Java REST框架

news/2024/12/22 0:03:21/文章来源:https://www.cnblogs.com/o-O-oO/p/18621576

原创 小小柑桔 小小柑桔 2024年12月21日 00:05 浙江

🌟 开篇引导

大家好,我是Java猫!今天要跟大家分享一个在Java后端开发中非常实用的REST框架 - Jersey。还记得我第一次使用Jersey时,被它的简洁优雅深深吸引。不需要复杂的配置,几个注解就能轻松构建RESTful API,简直是Web开发的一股清流!

📝 学习目标

掌握Jersey框架的核心概念
学会使用Jersey构建RESTful API
理解Jersey的依赖注入机制
熟练运用Jersey的常用注解

🔧 预备知识

Java基础知识
RESTful架构风格
Maven项目管理
Web开发基础

🚀 核心内容

  1. 快速入门

首先在Maven项目中添加Jersey依赖:

<dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet</artifactId><version>3.1.3</version>
</dependency>
<dependency><groupId>org.glassfish.jersey.inject</groupId><artifactId>jersey-hk2</artifactId><version>3.1.3</version>
</dependency>
<dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>3.1.3</version>
</dependency>
  1. 创建第一个REST接口
@Path("/hello")
publicclass HelloResource {@GET@Produces(MediaType.APPLICATION_JSON)public Response sayHello() {// 创建响应数据Map<String, String> response = new HashMap<>();response.put("message", "Hello from Jersey!");// 返回JSON响应return Response.ok(response).build();}@POST@Consumes(MediaType.APPLICATION_JSON)@Produces(MediaType.APPLICATION_JSON)public Response createGreeting(Map<String, String> input) {String name = input.get("name");Map<String, String> response = new HashMap<>();response.put("greeting", "Hello, " + name + "!");return Response.status(Response.Status.CREATED).entity(response).build();}
}
  1. Jersey常用注解解析

🔍 核心注解说明

    @Path:定义资源路径@GET/@POST/@PUT/@DELETE:HTTP方法@Produces:指定响应格式@Consumes:指定请求格式@PathParam:路径参数@QueryParam:查询参数
  1. 参数获取示例
@Path("/users")
public class UserResource {@GET@Path("/{id}")@Produces(MediaType.APPLICATION_JSON)public Response getUser(@PathParam("id") long id,@QueryParam("fields") String fields) {// 获取用户信息User user = userService.find(id);return Response.ok(user).build();}
}
  1. 异常处理
@Provider
public class CustomExceptionMapper implements ExceptionMapper<Exception> {@Overridepublic Response toResponse(Exception e) {Map<String, String> error = new HashMap<>();error.put("error", e.getMessage());return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).type(MediaType.APPLICATION_JSON).build();}
}

💡 实战案例

让我们创建一个简单的图书管理API:

@Path("/books")
publicclass BookResource {privatestatic Map<Long, Book> books = new HashMap<>();@GET@Produces(MediaType.APPLICATION_JSON)public Response getAllBooks() {return Response.ok(new ArrayList<>(books.values())).build();}@POST@Consumes(MediaType.APPLICATION_JSON)@Produces(MediaType.APPLICATION_JSON)public Response addBook(Book book) {book.setId(books.size() + 1L);books.put(book.getId(), book);return Response.status(Response.Status.CREATED).entity(book).build();}
}publicclass Book {private Long id;private String title;private String author;// getter和setter省略
}

✏️ 互动环节

练习题

如何在Jersey中实现基于角色的访问控制?
如何配置Jersey支持跨域请求?
实现一个支持分页的接口。

挑战任务

实现一个完整的ToDo List API,包含以下功能:

任务的CRUD操作
任务状态更新
任务过滤和排序
异常处理

📝 小结

本节重点回顾

Jersey是JAX-RS规范的参考实现
使用注解快速构建RESTful API
支持多种参数获取方式
灵活的异常处理机制

下期预告

下期我们将深入探讨Jersey的高级特性,包括:

过滤器和拦截器
异步处理
文件上传下载
安全认证

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

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

相关文章

[题解]AtCoder Beginner Contest 385(ABC385) A~F

A - Equally 显然分组情况一定是\(1+1+1\)或\(1+2\),直接判定即可。点击查看代码 #include<bits/stdc++.h> using namespace std; int a,b,c; signed main(){cin>>a>>b>>c;if((a+b==c)||(a+c==b)||(b+c==a)||(a==b&&b==c)) cout<<"…

【AI+模型】RAG 架构图解:从基础到高级的7种模式

RAG 技术通过在 AI 生成过程中引入外部知识检索,从基础的文档查询发展到多模态、Multi-Agent 体协同的智能架构,让 AI 回答更准确、更全面。 核心组件 嵌入模型: 将文本转换为向量表示 生成模型: 负责最终的内容生成 重排序模型: 优化检索结果的相关性 向量数据库:…

浅聊web前端性能测试

最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~ 首先从用户的思维去思考,关于web前端性能,用户最看重的是什么...... 其实就是下面三个点:1. 加载性能(即页面加载时间+资源加载时间)2. …

使用magic-api实现增删改查分页

创建项目结构 pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apach…

【安全评审】“2024网络安全100强-行业应用”评分全流程细则

一 指标理解1.1 “行业应用”的核心优势是什么?1.2 评估维度有哪些?二、评审专家筛选2.1 对专家所在单位有什么要求?2.2 对专家所在行业有什么要求?2.3 对专家个人能力有什么要求?2.4 对专家组有什么要求?2.5 对专家个人价值观有什么要求?三、评分规则制定3.1 “典型案例…

《计算机组成及汇编语言原理》阅读笔记:p9-p27

《计算机组成及汇编语言原理》学习第 2 天,p9-p27 总结,总计 19 页。 一、技术总结 1.quantum physics(量子物理学) (1)quantum(量子) quantum的本意是:c. the smallest amount of sth(量子)。 In physics, a quantum is the minimum amount of any physical entity (physi…

第4章 C#的高级特性

第4章 C#的高级特性 4.1 委托 4.1.2 多播委托 对值为 null 的委托变量进行 + ​或 += ​操作,等价于为变量指定一个新值: SomeDelegate d = null; d += SomeMethod1; // 等价于 d = SomeMethod1委托是 不可变 的,因此调用 += ​和 -= ​的实质是 创建一个新的委托实例 ,…

使用frida分析白盒aes,DFA攻击

这次分析的app是:五菱汽车(8.2.1) 登录,抓包发现请求体只有sd字段,看见加密的时候,可以先使用算法助手hook java层所有加解密方法发现我们所需要的sd加密字段在java层hook不到,那加密算法应该是写在了so层,因为这个app是bb加固企业,得有脱壳机才能脱。 jadx加载dex,直接…

2024 golang安装使用详细教程以及常见问题处理(附激活至2099年)

GoLand 简介 GoLand 是一款非常强大的 Go 语言集成开发环境,由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 下面这种方式仅供交流学习,如果有能力还请支持正版 下载安装 为了方便,也可以去链接取 点击获取安装包开始安装下载完成…

Infinite Pixels(无限像素)第五次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 小组成员分工完成选题的软件设计组长 祝方略-2022329301131组员1 娄涵格-2022329301112组员2 颜宇航-2022329301125组员3 常佳鑫-2022329301071一、团队介绍团队名称:Infinite Pixels(无限像素…

CMake构建学习笔记19-OpenSSL库的构建

详细介绍了在Windows和Linux环境下构建OpenSSL库的方法,并且如何通过CMake的方式被主程序调用。1. 概述 OpenSSL是一个开源的加密工具包和库,主要实现了安全套接字层(SSL)和传输层安全(TLS)协议,以及各种加密算法、数字签名、消息摘要、加密证书等功能。这个库可以说是W…

概率论沉思录:初等假设检验

我们在上一篇博客中介绍了传统的抽样理论。其中,我们导出了几种经典的抽样分布,也即给定关于所观察现象的假设H,数据D的概率分布p(D | H)。在上一篇博客中提到的伯努利坛子模型中,假设H即坛子的内容,数据D即重复抽球所生成的红球和白球序列。但正如我们我们在上一篇博客的…