0


超级轻量级别的java web 框架 --Jersey

在学习gin,goframe后发现,既然新兴语言的web框架也有全家桶一样的goframe,也有gin这种只提供基本简化的http服务的框架,那么java呢,于是今天的笔记就是初步认识java的轻量级框架,jersey

Jersey 是一个用于构建 RESTful Web 服务的 Java 框架,它是 JAX-RS(Java API for RESTful Web Services)规范的参考实现。JAX-RS 提供了一组注解和 API,帮助开发者以简单的方式开发 RESTful 服务,而 Jersey 是一个流行的 JAX-RS 实现,支持多种功能,如依赖注入、序列化、反序列化、异常处理等。

以下是学习 Jersey 框架的详细步骤:


1. JAX-RS 与 RESTful 概念简介

什么是 REST?

REST(Representational State Transfer)是一个轻量级的分布式架构风格,基于 HTTP 协议,适合 Web API 的设计。核心原则包括:

  • 资源:通过 URL 进行访问,每个资源都有唯一的 URI。
  • HTTP 方法:利用 HTTP 方法(GET, POST, PUT, DELETE)来执行 CRUD(增删改查)操作。
  • 无状态:服务器不存储客户端的会话信息。
  • 表示:资源以各种形式返回,如 JSON、XML、HTML。

什么是 JAX-RS?

JAX-RS 是 Java 的 RESTful Web 服务规范,定义了一套注解来简化 RESTful API 的开发:

  • @Path: 定义资源的 URI。
  • @GET: 处理 HTTP GET 请求。
  • @POST: 处理 HTTP POST 请求。
  • @PUT: 处理 HTTP PUT 请求。
  • @DELETE: 处理 HTTP DELETE 请求。
  • @Produces: 指定返回的内容类型(如 application/json)。
  • @Consumes: 指定请求体的内容类型。

2. Jersey 框架基础

Jersey 是 JAX-RS 的一个实现,因此它完全兼容 JAX-RS 规范。通过使用 Jersey,你可以快速地创建 RESTful 服务。

2.1. 搭建基础项目

首先,我们搭建一个简单的 Jersey 项目。你可以使用 Maven 来管理项目的依赖。

2.1.1 Maven 配置文件 (
pom.xml

)

我们需要在

pom.xml

文件中引入 Jersey 相关的依赖项:

<dependencies><!-- Jersey 核心依赖 --><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-server</artifactId><version>3.0.0</version></dependency><!-- Jersey 包含 JSON 支持 --><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>3.0.0</version></dependency><!-- Jersey 容器(嵌入式 Grizzly 容器) --><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-grizzly2-http</artifactId><version>3.0.0</version></dependency></dependencies>

2.2. 创建简单的 RESTful API

2.2.1 创建资源类

接下来,我们创建一个简单的 Jersey 资源类,处理客户端的 GET 请求。

importjavax.ws.rs.GET;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;@Path("/hello")publicclassHelloResource{@GET@Produces(MediaType.TEXT_PLAIN)publicStringsayHello(){return"Hello, Jersey!";}}
  • @Path("/hello"): 指定这个类对应的资源路径为 /hello
  • @GET: 处理 HTTP GET 请求。
  • @Produces(MediaType.TEXT_PLAIN): 返回的内容类型为纯文本(text/plain)当然我们最常使用的json。
2.2.2 启动 Jersey 服务

你可以创建一个简单的主类来启动 Jersey 服务:

importorg.glassfish.grizzly.http.server.HttpServer;importorg.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;importorg.glassfish.jersey.server.ResourceConfig;importjava.net.URI;publicclassMain{publicstaticfinalString BASE_URI ="http://localhost:8080/";publicstaticHttpServerstartServer(){// 创建包含资源类的 Jersey 应用程序finalResourceConfig rc =newResourceConfig().packages("your.package.name");returnGrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);}publicstaticvoidmain(String[] args){finalHttpServer server =startServer();System.out.println(String.format("Jersey app started at %s%nPress Ctrl+C to stop...", BASE_URI));}}
  • ResourceConfig: Jersey 的配置类,用于注册 REST 资源。
  • GrizzlyHttpServerFactory: 提供了一个简单的 HTTP 服务器实现,用于在本地运行 Jersey 应用程序。
2.2.3 运行项目

现在你可以运行

Main

类,启动服务器。服务器启动后,你可以通过浏览器访问

http://localhost:8080/hello

,应该会看到 “Hello, Jersey!” 的响应。


3. Jersey 注解详解

3.1.

@Path
  • 用于指定类或方法的 URI 路径。可以接受路径参数。

例如,

@Path("/users/{id}")

指定了一个路径参数

id

,你可以通过注入路径参数来使用它:

@GET@Path("/users/{id}")publicStringgetUser(@PathParam("id")String userId){return"User ID: "+ userId;}

3.2.

@GET

,

@POST

,

@PUT

,

@DELETE
  • 这些注解分别对应 HTTP 的 GET、POST、PUT 和 DELETE 方法。
@POST@Consumes(MediaType.APPLICATION_JSON)publicResponsecreateUser(User user){// 处理 POST 请求,创建新用户returnResponse.status(201).entity("User created").build();}

3.3.

@Consumes

@Produces
  • @Consumes: 指定方法能接受的 MIME 类型。
  • @Produces: 指定方法返回的 MIME 类型。

例如,一个方法接受 JSON 输入并返回 JSON 响应:

@POST@Consumes(MediaType.APPLICATION_JSON)@Produces(MediaType.APPLICATION_JSON)publicUsercreateUser(User user){// 创建用户逻辑 返回的对象序列化为jsonreturn user;}

3.4.

@QueryParam

@PathParam
  • @QueryParam: 用于从 URL 查询参数中提取值。
  • @PathParam: 用于从 URL 路径中提取值。
@GET@Path("/users")publicStringgetUserByQuery(@QueryParam("name")String name){return"User: "+ name;}

4. Jersey 进阶功能

4.1. 依赖注入(DI)

Jersey 支持依赖注入(DI),可以与 Guice 或 Spring 集成,也可以使用它内置的 DI 支持。

例如,你可以通过构造函数注入依赖:

@Singleton@Path("/service")publicclassMyService{privatefinalSomeDependency dependency;@InjectpublicMyService(SomeDependency dependency){this.dependency = dependency;}@GET@Produces(MediaType.TEXT_PLAIN)publicStringdoSomething(){return dependency.performAction();}}

4.2. 异常处理

Jersey 提供了异常处理机制,你可以创建自定义异常处理器来捕获并处理应用程序中的异常。

@ProviderpublicclassMyExceptionMapperimplementsExceptionMapper<MyException>{@OverridepublicResponsetoResponse(MyException exception){returnResponse.status(Response.Status.BAD_REQUEST).entity("Custom error message").build();}}
  • @Provider: 用于标识一个全局异常处理器。
  • ExceptionMapper<T>: 是一个用于处理特定类型异常的接口。

5. 使用 Swagger 生成 API 文档

Jersey 还可以与 Swagger 集成,生成漂亮的 API 文档。你可以通过注解简单地定义 API,并使用 Swagger 提供的界面生成文档。

添加 Swagger 依赖:
<dependency><groupId>io.swagger.core.v3</groupId><artifactId>swagger-jaxrs2</artifactId><version>2.1.0</version></dependency>
使用注解生成文档:
@Path("/users")@Api(value ="User Management", description ="Operations on users")publicclassUserResource{@GET@ApiOperation(value ="Get all users")@Produces(MediaType.APPLICATION_JSON)publicList<User>getAllUsers(){// 返回所有用户}@POST@ApiOperation(value ="Create a new user")@Consumes(MediaType.APPLICATION_JSON)publicResponsecreateUser(User user){// 创建用户}}

6.打包部署

javer已经习惯了springboot的jar包但是之前的web程序都是需要war装载tomcat运行的

将项目打包并部署到你的 Servlet 容器(如 Tomcat),然后启动 Tomcat。


本文转载自: https://blog.csdn.net/qq_55272229/article/details/143186263
版权归原作者 蓝胖子不是胖子 所有, 如有侵权,请联系我们删除。

“超级轻量级别的java web 框架 --Jersey”的评论:

还没有评论