原创 小小柑桔 小小柑桔 2024年12月21日 00:05 浙江
🌟 开篇引导
大家好,我是Java猫!今天要跟大家分享一个在Java后端开发中非常实用的REST框架 - Jersey。还记得我第一次使用Jersey时,被它的简洁优雅深深吸引。不需要复杂的配置,几个注解就能轻松构建RESTful API,简直是Web开发的一股清流!
📝 学习目标
掌握Jersey框架的核心概念
学会使用Jersey构建RESTful API
理解Jersey的依赖注入机制
熟练运用Jersey的常用注解
🔧 预备知识
Java基础知识
RESTful架构风格
Maven项目管理
Web开发基础
🚀 核心内容
- 快速入门
首先在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>
- 创建第一个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();}
}
- Jersey常用注解解析
🔍 核心注解说明
@Path:定义资源路径@GET/@POST/@PUT/@DELETE:HTTP方法@Produces:指定响应格式@Consumes:指定请求格式@PathParam:路径参数@QueryParam:查询参数
- 参数获取示例
@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();}
}
- 异常处理
@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的高级特性,包括:
过滤器和拦截器
异步处理
文件上传下载
安全认证