Jersey

如果没有一个好的工具包,开发RESTful Web服务可以无缝地支持在各种表示媒体类型中公开您的数据,并抽象出客户端 - 服务器通信的低级细节并非易事。

为了简化RESTful Web服务及其Java客户端的开发,设计了标准的可移植JAX-RS API。

Jersey RESTful Web Services框架是开源的,生产质量的框架,用于开发Java中的RESTful Web服务,为JAX-RS API提供支持,并用作JAX-RS(JSR 311和JSR 339)参考实现。

Jersey框架不仅仅是JAX-RS参考实现。

Jersey提供了自己的API,通过其他功能和实用程序扩展了JAX-RS工具包,以进一步简化RESTful服务和客户端开发。

Jersey还公开了许多扩展SPI,以便开发人员可以将Jersey扩展到最适合他们的需求。

目标

Jersey 项目的目标可归纳为以下几点:

  1. 跟踪JAX-RS API并定期发布GlassFish附带的生产质量参考实现;

  2. 提供API以扩展Jersey并构建用户和开发人员社区;

  3. 使用Java和Java虚拟机轻松构建RESTful Web服务。

快速开始

生成项目原型

  [plaintext]
1
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.27

项目结构

执行上面的命令,会创建一个 example-service 的 maven 项目。

目录结构如下:

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
─src │ ├─main │ │ └─java │ │ └─com │ │ └─example │ │ Main.java │ │ MyResource.java │ │ │ └─test │ └─java │ └─com │ └─example │ MyResourceTest.java

直接运行 Main.main()

运行日志如下:

  [plaintext]
1
2
3
4
5
6
一月 16, 2019 9:55:43 上午 org.glassfish.grizzly.http.server.NetworkListener start 信息: Started listener bound to [localhost:8080] Jersey app started with WADL available at http://localhost:8080/myapp/application.wadl Hit enter to stop it... 一月 16, 2019 9:55:43 上午 org.glassfish.grizzly.http.server.HttpServer start 信息: [HttpServer] Started.

WADL

直接访问 http://localhost:8080/myapp/application.wadl

信息如下:

  [xml]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<application xmlns="http://wadl.dev.java.net/2009/02"> <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.27 2018-04-10 07:34:57"/> <doc xmlns:jersey="http://jersey.java.net/" jersey:hint="This is simplified WADL with user and core resources only. To get full WADL with extended resources use the query parameter detail. Link: http://localhost:8080/myapp/application.wadl?detail=true"/> <grammars/> <resources base="http://localhost:8080/myapp/"> <resource path="myresource"> <method id="getIt" name="GET"> <response> <representation mediaType="text/plain"/> </response> </method> </resource> </resources> </application>

测试代码

项目中给出了测试代码

MyResourceTest.java

  [java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class MyResourceTest { private HttpServer server; private WebTarget target; @Before public void setUp() throws Exception { // start the server server = Main.startServer(); // create the client Client c = ClientBuilder.newClient(); // uncomment the following line if you want to enable // support for JSON in the client (you also have to uncomment // dependency on jersey-media-json module in pom.xml and Main.startServer()) // -- // c.configuration().enable(new org.glassfish.jersey.media.json.JsonJaxbFeature()); target = c.target(Main.BASE_URI); } @After public void tearDown() throws Exception { server.stop(); } /** * Test to see that the message "Got it!" is sent in the response. */ @Test public void testGetIt() { String responseMsg = target.path("myresource").request().get(String.class); assertEquals("Got it!", responseMsg); } }

直接运行测试即可。

或者 Maven 命令

  [plaintext]
1
mvn clean test