用 Jersey 创建 REST 服务

    用 Jersey 创建 REST 服务 - 图2

    如果 没有未自动生成 java ,可以自己创建补齐。

    导入 eclipse 中方便开发。

    可以内嵌 Jetty 、Tomcat 等 web 容器,这样就方便运行项目,进行调试

    添加 maven 插件,嵌入 Tomcat 7

    1. <plugin>
    2. <groupId>org.apache.maven.plugins</groupId>
    3. <artifactId>maven-compiler-plugin</artifactId>
    4. <version>3.2</version>
    5. <configuration>
    6. <source>1.7</source>
    7. <target>1.7</target>
    8. </configuration>
    9. </plugin>
    10. <plugin>
    11. <groupId>org.apache.tomcat.maven</groupId>
    12. <artifactId>tomcat7-maven-plugin</artifactId>
    13. <version>2.2</version>
    14. <configuration>
    15. <uriEncoding>UTF-8</uriEncoding>
    16. <path>/</path>
    17. </configuration>
    18. </plugin>
    19. </plugins>

    修改 JUnit 的版本 ,如下:

    1. <dependency>
    2. <groupId>junit</groupId>
    3. <artifactId>junit</artifactId>
    4. <version>4.12</version>
    5. <scope>test</scope>
    6. </dependency>

    进行编译

    1. mvn clean install

    问题

    用 Jersey 创建 REST 服务 - 图5

    添加

    1. <dependency>
    2. <artifactId>javax.servlet-api</artifactId>
    3. <version>3.1.0</version>
    4. <scope>provided</scope>
    5. <dependency>
    6. <groupId>javax.servlet.jsp</groupId>
    7. <artifactId>jsp-api</artifactId>
    8. <version>2.2</version>
    9. <scope>provided</scope>
    10. </dependency>

    进行编译

    1. mvn clean install

    运行 web 项目:

    1. mvn tomcat7:run

    自从,一个简单的 maven web 项目已经完成。

    添加 Jersey 模块

    这里用 jersey.version 变量来进行多个模块,相同版本的管理,其中 jersey-media-moxy 用来处理 json 的转换

    在 pom.xml 中添加

    1. <properties>
    2. <jersey.version>2.14</jersey.version>
    3. </properties>

    此时,项目已经具备了开发 Jersey REST 的能力,下面添加代码

    创建以下 java 文件

    RestApplication.java

    1. package com.waylau.rest;
    2. import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
    3. import org.glassfish.jersey.server.ResourceConfig;
    4. /**
    5. * REST 主应用
    6. *
    7. * @author waylau.com
    8. * 2015-1-12
    9. */
    10. public class RestApplication extends ResourceConfig {
    11. public RestApplication() {
    12. //服务类所在的包路径
    13. packages("com.waylau.rest.resource");
    14. //注册 JSON 转换器
    15. register(MoxyJsonFeature.class);
    16. }

    HelloResource.java

    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. /**
    6. * 测试用的 Resource
    7. *
    8. * @author waylau.com
    9. * 2015年1月12日
    10. */
    11. @Path("hello")
    12. public class HelloResource {
    13. /**
    14. * 方法处理 HTTP GET 请求. 返回给客户端的对象是
    15. * 转成了"text/plain" 媒体类型
    16. *
    17. * @return String ,转成了 text/plain 响应
    18. */
    19. @GET
    20. @Produces(MediaType.TEXT_PLAIN)
    21. public String getIt() {
    22. return "Got it! Welcome to waylau's REST world!";
    23. }
    24. }

    解释:在 hello 路径下,可以访问到 HelloResource 中的 getIt() 方法返回的资源。

    在 web.xml 增加 Jersey 的过滤器

    解释:所有的Jersey REST 接口都发布到 rest 路径下。

    ok ,服务端代码敲完,现在开发客户端,打开 index.jsp ,添加如下

    1. <a href="/rest/hello">hello world</a>

    这句的含义是,调用 Jersey REST 发布的 /rest/hello接口

    执行 mvn tomcat7:run

    首页是这样的

    用 Jersey 创建 REST 服务 - 图8