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 项目的目标可归纳为以下几点:
-
跟踪JAX-RS API并定期发布GlassFish附带的生产质量参考实现;
-
提供API以扩展Jersey并构建用户和开发人员社区;
-
使用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