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服务。

快速开始

生成项目原型

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 项目。

目录结构如下:

─src
│  ├─main
│  │  └─java
│  │      └─com
│  │          └─example
│  │                  Main.java
│  │                  MyResource.java
│  │
│  └─test
│      └─java
│          └─com
│              └─example
│                      MyResourceTest.java

直接运行 Main.main()

运行日志如下:

一月 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

信息如下:

<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

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 命令

mvn clean test