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,則需要引入相關的依賴,否則報錯。
- 該方法返回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:
還有一些獲取參數的寫法,是直接在請求路徑上拼接特定的參數:
在注解@Path中的{id}/{id2}/{id3},表示攜帶的參數,參數1,參數2,參數3;然后通過@PathParam獲取參數的值。
Jersey常見注解含義:
總結
以上是生活随笔為你收集整理的Java Restful风格-Jersey RESTful 框架入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python xlutils教程_Pyt
- 下一篇: 10个常见的JS语言错误总汇