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

打印 上一主题 下一主题

主题 800|帖子 800|积分 2400

在学习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 相关的依赖项:
  1. <dependencies>
  2.     <!-- Jersey 核心依赖 -->
  3.     <dependency>
  4.         <groupId>org.glassfish.jersey.core</groupId>
  5.         <artifactId>jersey-server</artifactId>
  6.         <version>3.0.0</version>
  7.     </dependency>
  8.     <!-- Jersey 包含 JSON 支持 -->
  9.     <dependency>
  10.         <groupId>org.glassfish.jersey.media</groupId>
  11.         <artifactId>jersey-media-json-jackson</artifactId>
  12.         <version>3.0.0</version>
  13.     </dependency>
  14.     <!-- Jersey 容器(嵌入式 Grizzly 容器) -->
  15.     <dependency>
  16.         <groupId>org.glassfish.jersey.containers</groupId>
  17.         <artifactId>jersey-container-grizzly2-http</artifactId>
  18.         <version>3.0.0</version>
  19.     </dependency>
  20. </dependencies>
复制代码
2.2. 创建简单的 RESTful API

2.2.1 创建资源类

接下来,我们创建一个简单的 Jersey 资源类,处理客户端的 GET 哀求。
  1. import javax.ws.rs.GET;
  2. import javax.ws.rs.Path;
  3. import javax.ws.rs.Produces;
  4. import javax.ws.rs.core.MediaType;
  5. @Path("/hello")
  6. public class HelloResource {
  7.     @GET
  8.     @Produces(MediaType.TEXT_PLAIN)
  9.     public String sayHello() {
  10.         return "Hello, Jersey!";
  11.     }
  12. }
复制代码


  • @Path("/hello"): 指定这个类对应的资源路径为 /hello。
  • @GET: 处理 HTTP GET 哀求。
  • @Produces(MediaType.TEXT_PLAIN): 返回的内容类型为纯文本(text/plain)当然我们最常使用的json。
2.2.2 启动 Jersey 服务

你可以创建一个简单的主类来启动 Jersey 服务:
  1. import org.glassfish.grizzly.http.server.HttpServer;
  2. import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
  3. import org.glassfish.jersey.server.ResourceConfig;
  4. import java.net.URI;
  5. public class Main {
  6.     public static final String BASE_URI = "http://localhost:8080/";
  7.     public static HttpServer startServer() {
  8.         // 创建包含资源类的 Jersey 应用程序
  9.         final ResourceConfig rc = new ResourceConfig().packages("your.package.name");
  10.         return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
  11.     }
  12.     public static void main(String[] args) {
  13.         final HttpServer server = startServer();
  14.         System.out.println(String.format("Jersey app started at %s%nPress Ctrl+C to stop...", BASE_URI));
  15.     }
  16. }
复制代码


  • 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,你可以通过注入路径参数来使用它:
  1. @GET
  2. @Path("/users/{id}")
  3. public String getUser(@PathParam("id") String userId) {
  4.     return "User ID: " + userId;
  5. }
复制代码
3.2. @GET, @POST, @PUT, @DELETE



  • 这些注解分别对应 HTTP 的 GET、POST、PUT 和 DELETE 方法。
  1. @POST
  2. @Consumes(MediaType.APPLICATION_JSON)
  3. public Response createUser(User user) {
  4.     // 处理 POST 请求,创建新用户
  5.     return Response.status(201).entity("User created").build();
  6. }
复制代码
3.3. @Consumes 和 @Produces



  • @Consumes: 指定方法能接受的 MIME 类型。
  • @Produces: 指定方法返回的 MIME 类型。
例如,一个方法接受 JSON 输入并返回 JSON 相应:
  1. @POST
  2. @Consumes(MediaType.APPLICATION_JSON)
  3. @Produces(MediaType.APPLICATION_JSON)
  4. public User createUser(User user) {
  5.     // 创建用户逻辑 返回的对象序列化为json
  6.     return user;
  7. }
复制代码
3.4. @QueryParam 和 @PathParam



  • @QueryParam: 用于从 URL 查询参数中提取值。
  • @PathParam: 用于从 URL 路径中提取值。
  1. @GET
  2. @Path("/users")
  3. public String getUserByQuery(@QueryParam("name") String name) {
  4.     return "User: " + name;
  5. }
复制代码

4. Jersey 进阶功能

4.1. 依赖注入(DI)

Jersey 支持依赖注入(DI),可以与 Guice 或 Spring 集成,也可以使用它内置的 DI 支持。
例如,你可以通过构造函数注入依赖:
  1. @Singleton
  2. @Path("/service")
  3. public class MyService {
  4.     private final SomeDependency dependency;
  5.     @Inject
  6.     public MyService(SomeDependency dependency) {
  7.         this.dependency = dependency;
  8.     }
  9.     @GET
  10.     @Produces(MediaType.TEXT_PLAIN)
  11.     public String doSomething() {
  12.         return dependency.performAction();
  13.     }
  14. }
复制代码
4.2. 非常处理

Jersey 提供了非常处理机制,你可以创建自定义非常处理器来捕捉并处理应用步伐中的非常。
  1. @Provider
  2. public class MyExceptionMapper implements ExceptionMapper<MyException> {
  3.     @Override
  4.     public Response toResponse(MyException exception) {
  5.         return Response.status(Response.Status.BAD_REQUEST)
  6.                        .entity("Custom error message")
  7.                        .build();
  8.     }
  9. }
复制代码


  • @Provider: 用于标识一个全局非常处理器。
  • ExceptionMapper<T>: 是一个用于处理特定类型非常的接口。

5. 使用 Swagger 生成 API 文档

Jersey 还可以与 Swagger 集成,生成美丽的 API 文档。你可以通过注解简单地定义 API,并使用 Swagger 提供的界面生成文档。
添加 Swagger 依赖:

  1. <dependency>
  2.     <groupId>io.swagger.core.v3</groupId>
  3.     <artifactId>swagger-jaxrs2</artifactId>
  4.     <version>2.1.0</version>
  5. </dependency>
复制代码
使用注解生成文档:

  1. @Path("/users")
  2. @Api(value = "User Management", description = "Operations on users")
  3. public class UserResource {
  4.     @GET
  5.     @ApiOperation(value = "Get all users")
  6.     @Produces(MediaType.APPLICATION_JSON)
  7.     public List<User> getAllUsers() {
  8.         // 返回所有用户
  9.     }
  10.     @POST
  11.     @ApiOperation(value = "Create a new user")
  12.     @Consumes(MediaType.APPLICATION_JSON)
  13.     public Response createUser(User user) {
  14.         // 创建用户
  15.     }
  16. }
复制代码
6.打包部署

javer已经风俗了springboot的jar包但是之前的web步伐都是需要war装载tomcat运行的
将项目打包并部署到你的 Servlet 容器(如 Tomcat),然后启动 Tomcat。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表