Jersey 開發RESTful(十)Jersey的配置
【原創文章,轉載請註明原文章地址,謝謝!】
預設情況下,不管是使用Servlet容器啟動還是內建伺服器啟動,我們都是使用的Jersey的預設配置選項。本節我們簡單的介紹一下Jersey的一些自定義配置方式。
Application
在JAX-RS中,提供了一個非常重要的物件:javax.ws.rs.core.Application。該類定義了一個JAX-RS應用的基本元件和相關的資訊。一般我們可以使用Application或者通過繼承Application類來完成自己的特定的配置。
該類中就只提供了三個方法用來複寫:
- public Set<Class<?>> getClasses():該方法需要返回一組元件的型別,返回的型別就是需要註冊的元件,可以是資源類,Providers等。
- public Set<Object> getSingletons():該方法需要返回一組元件的例項,這些例項就是資源類,Providers等,但是要求這些資源類,Provider的例項都是完成了相關依賴的注入的,並且都是單利的(這點我們在之前已經介紹過了@Singleton)。本質來說,這個方法就是JAX-RS的各種元件的工廠方法。
- public Map<String, Object> 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的配置:
<servlet>
<servlet-name>JerseyServletContainer</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>cn.wolfcode.jersey._02Application.RestApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
新增了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,所以可能也能看到這樣的配置:
<filter>
<filter-name>JerseyServletContainer</filter-name>
<filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>cn.wolfcode.jersey._02Application.RestApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>JerseyServletContainer</filter-name>
<url-pattern>/webapi/*</url-pattern>
</filter-mapping>
只需要把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中需要新增的依賴是:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.25</version>
</dependency>
還有一個類似的依賴是jersey-container-servlet-core,這個依賴包只適合配置在Servlet2.5容器中。
小結
在本節中,主要介紹了Jersey中的自定義配置,和相關的一些基本的部署方式。為我們後面即將要講到的Provider等提供基本的操作基礎。
相關文章
- Jersey 開發RESTful(七)Jersey快速入門REST
- 使用 Jersey 和 Apache Tomcat 構建 RESTful Web 服務ApacheTomcatRESTWeb
- Jersey—建立restfulwebservice—例項RESTWeb
- 使用Kotlin + Jersey + Jetty + MongoDB建立可擴充套件的RESTful API - AndrewKotlinJettyMongoDB套件RESTAPI
- JERSEY學習遇到的問題
- Jersey 框架取到所有引數的方法框架
- jersey 框架傳輸格式 (2) xml框架XML
- Jersey2.x分支JavaSE相容性Java
- Jersey2.x從MavenArchetype建立一個新專案Maven
- Fan Jersey智慧T恤:可調動穿戴者的情緒很神奇
- 從一次編譯出發梳理概念: Jetty,Jersey,hk2,glassFish,Javax,Jakarta編譯JettyJava
- 介面開發-restfulREST
- 使用 Hapi 開發 RESTful APIsAPIREST
- 使用CXF開發RESTFul服務REST
- Laravel 開發 RESTful API 的一些心得LaravelRESTAPI
- 如何編寫基於Spring Jax-Rs Jersey,HATEOAS API和JerseyTest框架整合的Spring Boot微服務 -DZone MicroservicesAPI框架Spring Boot微服務ROS
- 使用flask開發RESTful架構的api伺服器端(3)–簡單的RESTful servicesFlaskREST架構API伺服器
- 後端開發必備的 RestFul API 知識後端RESTAPI
- Flask RESTful Web服務的開發套路總結FlaskRESTWeb
- 【Myself-Security】SpringMVC 開發 RESTFul APISpringMVCRESTAPI
- Flask RESTful API 開發----基礎篇 (1)FlaskRESTAPI
- Flask RESTful API 開發----基礎篇 (2)FlaskRESTAPI
- Laravel RESTFul API 模組化開發解決方案LaravelRESTAPI
- java JAX-RS快速開發RESTful服務JavaREST
- SpringBoot整合Redis開發RESTful API介面Spring BootRedisRESTAPI
- Java開發中RestFul服務介面規範JavaREST
- 提升開發效率的十個工具
- 十款最新的JavaScript開發工具JavaScript
- SpringMvc筆記-對RESTFUL風格的配置SpringMVC筆記REST
- 用 Go 快速開發一個 RESTful API 服務GoRESTAPI
- PHP 開發 「十宗罪」PHP
- 小程式開發十問
- 開發十年,部落格園十年
- .Net Core 開發電商後端API 吃透RESTful風格後端APIREST
- .Net Web 開發研習(1) —— Web開發的“十事要說”Web
- 基於.NetCore開發部落格專案 StarBlog - (21) 開始開發RESTFul介面NetCoreREST
- 微信開發的基礎配置
- 常用的十大Python開發工具Python