Java Restful风格-Jersey RESTful 框架入门

Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。

Jersey入门案例:

Jersey是一个REST框架,有很多相关概念会与SpringMVC实现RESTful相似,所以我们可以对比着学习,Jersey还有一个特点就是,基于Jersey的REST应用,可以运行在Servlet环境下面,也可以脱离该环境。 下面将使用两种方式实现Jersey的入门。

一、基于Servlet容器
创建一个web项目,项目结构如下
在这里插入图片描述

在pom.xml中只需要引入一个Jersey的Servlet容器依赖

 <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet</artifactId>
      <version>2.25</version>
    </dependency>

然后在web.xml文件中添加Jersey的拦截器

 <servlet>
    <servlet-name>JerseyServletContainer</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <!-- jersey.config.server.provider.packages 用于扫描Jersey服务类所在的包-->
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.hnhe.jersey</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JerseyServletContainer</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>

其中ServletContainer即为核心控制器,jersey.config.server.provider.packages参数用于扫描jersey中REST服务类所在的包,有点类似于SpringMVC的包扫描,而 配置的/api/* 项目服务总体前缀。

定义rest服务类

@Path("service")
public class JerSeyDemo {
    @GET // request method
    @Produces(MediaType.TEXT_PLAIN)
    @Path("/go")
    public String go(){

        return "demo go go go";
    }
  }
  • 主要该类必须是之前配置的路径下的包,确保能被扫描到。
  • 在类上面添加了@Path(“service”),代表资源根路径为service,类似于SpringMVC中在类上面添加@RequestMapping(“service”);
  • 方法go上面添加了两个标签,@GET标签代表该方法接受GET类型请求,类似于SpringMVC中的@GetMapping标签;
  • @Produces标签代表该方法的响应MIME类型为text/plain,类似于@RequestMapping中的produces属性;如果@Produces的类型是MediaType.APPLICATION_JSON,则需要引入相关的依赖,否则报错。
 <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <version>2.25</version>
    </dependency>
  • 该方法返回String,这个String值Jersey会自动按照text/plain格式输出。

添加tomcat服务,部署项目发布
在这里插入图片描述
访问http://localhost:8080/JerseyProDemo/api/service/go
在这里插入图片描述
二、使用内置容器
Jersey提供了在SE环境下的部署,即使用内置的服务器来发布REST服务。提供了对Jetty,JDK HttpServer,Grizzly HttpServer,和一个内置的Simple HttpServer来部署。下面简单来看一下使用Jetty发布Jersey服务的例子:

在pom.xml文件中添加jetty依赖

<--!该依赖里面包含了jetty相关的jar包及jersey-jetty相关发布依赖-->
<dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-jetty-http</artifactId>
      <version>2.21</version>
    </dependency>

创建一个类用于设置发布环境

import org.glassfish.jersey.server.ResourceConfig;

/**
 *ResourceConfig 是Jersey 中用于配置应用资源类
 * 在Jersey中 把所有提供rest服务的类 都称为资源类
 */
public class RestApplication extends ResourceConfig {
    public RestApplication(){
        this.packages("com.hnhe.jersey");
    }
}
  • ResourceConfig类继承了Application类,这是Jersey中一个非常基础的类,用于定义一个JAX-RS应用的基础组件。该类实现了org.glassfish.jersey.server.ServerConfig接口,该接口用于注册应用中的资源组件;
  • 该类还实现了javax.ws.rs.core.Configurable接口,该接口用于向当前应用上下文中注册一些必要的组件和元信息。
  • 在RestApplication类的构造方法中,我们调用了packages方法注册了扫描资源类的基础包;

发布应用:

import org.glassfish.jersey.jetty.JettyHttpContainerFactory;
import java.net.URI;

public class App {
    public static void main(String[] args) {
        /**
         * 使用包装好的JettyHttpContainerFactory,来发布一个应用。
         * 第一个参数:发布的url地址
         * 第二个参数:传入一个我们创建的应用配置对象
         */
        JettyHttpContainerFactory.createServer(URI.create("http://localhost:8081/"),new RestApplication());
    }
}

访问地址:http://localhost:8081/service/go 结果一样

三、Jersey的简单应用

获取参数方式1:

   @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/add")
    public void add(@QueryParam("id") String id){

        System.out.println("id = "+id);

    }

http://localhost:8081/service/add/id=8
在这里插入图片描述
@QueryParam有点类似 于SpringMVC中的@PathVariable标签;

获取参数方式2:
还有一些获取参数的写法,是直接在请求路径上拼接特定的参数:

  @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/test/{id}/{id2}/{id3}")
    public List<Long> test(@PathParam("id") Long id,
                     @PathParam("id2") Long id2,
                     @PathParam("id3") Long id3){
       List<Long> idList = new ArrayList<>();
       idList.add(id);
       idList.add(id2);
       idList.add(id3);

       return idList;

    }

在这里插入图片描述
在注解@Path中的{id}/{id2}/{id3},表示携带的参数,参数1,参数2,参数3;然后通过@PathParam获取参数的值。

Jersey常见注解含义:
在这里插入图片描述
在如这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值