首页 > 技术文章 > RESTFul系列文章 >

Jersey 开发RESTful(十)Jersey的配置

更新时间:2018-06-02 | 阅读量(1,252)

【原创文章,转载请注明原文章地址,谢谢!】 >默认情况下,不管是使用Servlet容器启动还是内置服务器启动,我们都是使用的Jersey的默认配置选项。本节我们简单的介绍一下Jersey的一些自定义配置方式。 #Application 在JAX-RS中,提供了一个非常重要的对象:javax.ws.rs.core.Application。该类定义了一个JAX-RS应用的基本组件和相关的信息。一般我们可以使用Application或者通过继承Application类来完成自己的特定的配置。 该类中就只提供了三个方法用来复写: + public Set> getClasses():该方法需要返回一组组件的类型,返回的类型就是需要注册的组件,可以是资源类,Providers等。 + public Set getSingletons():该方法需要返回一组组件的实例,这些实例就是资源类,Providers等,但是要求这些资源类,Provider的实例都是完成了相关依赖的注入的,并且都是单利的(这点我们在之前已经介绍过了@Singleton)。本质来说,这个方法就是JAX-RS的各种组件的工厂方法。 + public Map getProperties():该方法是自定义的针对Jersey的配置项。返回的配置项将会设置给javax.ws.rs.core.Configuration接口的实现,一个Configuration对象保存了一个JAX-RS应用的配置状态。 通过上面的介绍我们可以看到,如果要我们自己完全通过继承Application类,来实现我们自己的应用配置,这个是很困难的时候。所以更多的时候,我们采用了另外的方式。 #ResourceConfig 为了方便我们自定义应用,Jersey提供了org.glassfish.jersey.server.ResourceConfig类来简化我们的操作。ResourceConfig类是Jersey自己实现了Application,并且还实现了Configuration接口。 ResourceConfig类提供了非常多的方法来注册JAX-RS组件,比如自动的资源类扫描就是其提供的众多功能之一。 我们想要使用ResourceConfig类来注册我们自己的组件,只需要继承ResourceConfig,并且在构造方法中,注册我们自己的组件即可。 public class RestApplication extends ResourceConfig { public RestApplication(){ this.packages("cn.wolfcode.jersey"); this.registerClasses(MyResourceInotherPackage.class); this.register(MultiPartFeature.class); this.register(FastjsonBodyReader.class); this.register(FastjsonBodyWriter.class); this.property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE_SERVER, true); } } 在这个自定义类中,展示了几点: 1,通过继承ResourceConfig类,并且在类的构造方法中,完成了我们自己的组件注册和配置; 2,最常用的配置方法: + packages:提供自动扫描组件,包括资源类,Provider,Feature;如果有多个包需要扫描,用分号隔开; + registerClasses:提供手动注册组件,包括资源类,Provider,Feature等,提供可变参数同时注册多个; + register:提供手动注册组件,包括Provider和Feature; + property:提供手动添加配置选项的方法; 完成配置之后,我们提供在Servlet环境和内置环境下两种配置方式: ####在Servlet环境下配置 修改web.xml,去掉之前的自动包扫描配置,替换为Application的配置: JerseyServletContainer org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application cn.wolfcode.jersey._02Application.RestApplication 1 添加了javax.ws.rs.Application配置,值设置为自己的ResourceConfig类即可。 ####内置环境下配置 public class App { public static void main(String[] args) { JettyHttpContainerFactory.createServer(URI.create("http://localhost:8082/"), new RestApplication()); } } 也非常简单,只需要在第二个参数中,创建我们自定义的ResourceConfig类的实例即可!! ####使用Filter配置Jersey 之前我们在Servlet容器中,使用的是Servlet的方式来完成Jersey前置控制器的配置,其实Jersey的ServletContainer类,既是一个Servlet,又是一个Filter,所以可能也能看到这样的配置: JerseyServletContainer org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application cn.wolfcode.jersey._02Application.RestApplication JerseyServletContainer /webapi/* 只需要把servlet配置换成filter即可! ####Servlet3.0容器下的配置 在Servlet3.0之后,容器提供了更多的非XML配置的方式,允许通过编程的方式完成应用的配置。如果我们的应用发布在支持Servlet3.0容器中,又有更为简单的配置方式,下面列出最常见的Servlet3.0容器下的配置方式: @ApplicationPath("webapi") public class RestApplication extends ResourceConfig { public RestApplication(){ this.packages("cn.wolfcode.jersey"); } } 只需要在我们的ResourceConfig继承类上面添加@ApplicationPath注解即可。在ApplicationPath中设置的就是应用的虚拟目录。 这里稍微注意一点,就是如果部署在Servlet3.0容器中,pom.xml中需要添加的依赖是: org.glassfish.jersey.containers jersey-container-servlet 2.25 还有一个类似的依赖是jersey-container-servlet-core,这个依赖包只适合配置在Servlet2.5容器中。 #小结 在本节中,主要介绍了Jersey中的自定义配置,和相关的一些基本的部署方式。为我们后面即将要讲到的Provider等提供基本的操作基础。 ![WechatIMG7.jpeg](http://upload-images.jianshu.io/upload_images/807144-1e32082fd0c351ac.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
叩丁狼学员采访 叩丁狼学员采访
叩丁狼头条 叩丁狼头条
叩丁狼在线课程 叩丁狼在线课程