jersey學(xué)習(xí)筆記 quick start

目的和綜述

1. 實(shí)現(xiàn)JAX-RS API規(guī)范锭部,提供固定周期的發(fā)布;
2. 提供擴(kuò)展Api提供自定義的開發(fā)功能;
3. 更簡單的使用java開發(fā)RESFull應(yīng)用
僅僅core-common and core-client可以使用java6牵署,其他模塊需要使用java7

使用maven創(chuàng)建

創(chuàng)建一個(gè)直接執(zhí)行的空工程
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.24
創(chuàng)建一個(gè)可以打包為war的空工程mvn clean package
mvn archetype:generate -DarchetypeArtifactId=jersey-heroku-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-heroku-webapp -Dpackage=com.example -DarchetypeVersion=2.24

jersey 范例

https://github.com/jersey/jersey/tree/2.24/examples

配置資源

  • @Path 配置資源的相對(duì)路徑,路徑前后無所謂有沒有‘/’
    • @Path("/users")
    • @Path("/users/{username}") 傳入?yún)?shù)
    • @Path("users/{username: [a-zA-Z][a-zA-Z_0-9]*}") 限制參數(shù)路徑格式
  • @GET, @PUT, @POST, @DELETE, @HEAD, ... (HTTP Methods)
    • 默認(rèn)支持HEAD,OPTIONS請(qǐng)求
    • HEAD請(qǐng)求會(huì)忽略返回的結(jié)果
    • OPTIONS 方法可以根據(jù)請(qǐng)求頭的Accept字段返回對(duì)應(yīng)結(jié)果
  • @Produces設(shè)置請(qǐng)求返回的MIME類型
    • 放在類上篱蝇,代表本類默認(rèn)沒有@Produces類型的都使用默認(rèn)類型
    • 范例@Produces("text/html")辫诅, @Produces({"application/xml", "application/json"});
  • @Consumes 可接受的類型
  • @*Param 參數(shù)注解
    • @QueryParam 從Url請(qǐng)求上請(qǐng)求的參數(shù)

      @Path("smooth")
      @GET
      public Response smooth(
          @DefaultValue("2") @QueryParam("step") int step,
          @DefaultValue("true") @QueryParam("max-m") boolean hasMax,
          @DefaultValue("red") @QueryParam("last-color") ColorParam lastColor) {
          ...
      }
      
      • 參數(shù)類型要求
        1. 為基礎(chǔ)類型佩抹;
        2. 有一個(gè)參數(shù)類型為String構(gòu)造函數(shù);
        3. 有一個(gè)Strig參數(shù)的靜態(tài)方法取董,名稱為valueOf棍苹、fromString;
        4. 實(shí)現(xiàn)接口javax.ws.rs.ext.ParamConverterProvider;
        5. 類型為List<T>, Set<T> or SortedSet<T>, 且T類型滿足第2茵汰、3條枢里;
    • The @PathParam and the other parameter-based annotations, @MatrixParam, @HeaderParam, @CookieParam, @FormParam obey the same rules as @QueryParam. @MatrixParam extracts information from URL path segments. @HeaderParam extracts information from the HTTP headers. @CookieParam extracts information from the cookies declared in cookie related HTTP headers.

    • @FormParam 從MIME類型為 "application/x-www-form-urlencoded"的請(qǐng)求中提取參數(shù)。

      @POST
      @Consumes("application/x-www-form-urlencoded")
      public void post(@FormParam("name") String name) {
          // Store the message
      }
      
    • @BeanParam 將所有參數(shù)轉(zhuǎn)換成一個(gè)Bean

      public class MyBeanParam {
          @PathParam("p")
          private String pathParam;
       
          @MatrixParam("m")
          @Encoded
          @DefaultValue("default")
          private String matrixParam;
       
          @HeaderParam("header")
          private String headerParam;
       
          private String queryParam;
       
          public MyBeanParam(@QueryParam("q") String queryParam) {
              this.queryParam = queryParam;
          }
       
          public String getPathParam() {
              return pathParam;
          }
          ...
      }
      @POST
      public void post(@BeanParam MyBeanParam beanParam, String entity) {
          final String pathParam = beanParam.getPathParam(); // contains injected path parameter "p"
          ...
      }
      
    • 可以使用@Context注入HttpHeaders, Request, UriInfo, SecurityContext.

獲取所有參數(shù)
~~~
@GET
public String get(@Context UriInfo ui) {
    MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
    MultivaluedMap<String, String> pathParams = ui.getPathParameters();
}
@GET
public String get(@Context HttpHeaders hh) {
    MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();
    Map<String, Cookie> pathParams = hh.getCookies();
}
@POST
@Consumes("application/x-www-form-urlencoded")
public void post(MultivaluedMap<String, String> formParams) {
    // Store the message
}
~~~

子資源

@Path("/item")
public class ItemResource {
    @Context UriInfo uriInfo;
 
    @Path("content")
    public ItemContentResource getItemContentResource() {
        return new ItemContentResource();
    }
 
    @GET
    @Produces("application/xml")
        public Item get() { ... }
    }
}
 
public class ItemContentResource {
 
    @GET
    public Response get() { ... }
 
    @PUT
    @Path("{version}")
    public void put(@PathParam("version") int version,
                    @Context HttpHeaders headers,
                    byte[] in) {
        ...
    }
}

默認(rèn)資源類都是prototype,當(dāng)使用@Singleton時(shí)可以控制為案例

資源文件定義可以通過繼承Application實(shí)現(xiàn)

*  ResourceConfig默認(rèn)實(shí)現(xiàn)

使用java spi方式查找META-INF/services/中提供的實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栏豺,隨后出現(xiàn)的幾起案子彬碱,更是在濱河造成了極大的恐慌,老刑警劉巖奥洼,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷疼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡溉卓,警方通過查閱死者的電腦和手機(jī)皮迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑寨,“玉大人伏尼,你說我怎么就攤上這事∥疚玻” “怎么了爆阶?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沙咏。 經(jīng)常有香客問我辨图,道長,這世上最難降的妖魔是什么肢藐? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任故河,我火速辦了婚禮,結(jié)果婚禮上吆豹,老公的妹妹穿的比我還像新娘鱼的。我一直安慰自己,他們只是感情好痘煤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布凑阶。 她就那樣靜靜地躺著,像睡著了一般衷快。 火紅的嫁衣襯著肌膚如雪宙橱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天蘸拔,我揣著相機(jī)與錄音师郑,去河邊找鬼。 笑死调窍,一個(gè)胖子當(dāng)著我的面吹牛宝冕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陨晶,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼猬仁,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帝璧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起湿刽,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤的烁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诈闺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渴庆,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年雅镊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了襟雷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仁烹,死狀恐怖耸弄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卓缰,我是刑警寧澤计呈,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站征唬,受9級(jí)特大地震影響捌显,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜总寒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一扶歪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摄闸,春花似錦善镰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眠副。三九已至画切,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囱怕,已是汗流浹背霍弹。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娃弓,地道東北人典格。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像台丛,于是被迫代替她去往敵國和親耍缴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砾肺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)防嗡,斷路器变汪,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • github地址他嫡,歡迎大家提交更新番官。 express() express()用來創(chuàng)建一個(gè)Express的程序。ex...
    Programmer客棧閱讀 2,503評(píng)論 0 1
  • # 一度蜜v3.0協(xié)議 --- # 交互協(xié)議 [TOC] ## 協(xié)議說明 ### 請(qǐng)求參數(shù) 下表列出了v3.0版協(xié)...
    c5e350bc5b40閱讀 641評(píng)論 0 0
  • title: Java EE 7 Tutorial分析date: 2016-12-10 16:47:25catag...
    raincoffee閱讀 1,873評(píng)論 2 2
  • Spring的模型-視圖-控制器(MVC)框架是圍繞一個(gè)DispatcherServlet來設(shè)計(jì)的钢属,這個(gè)Servl...
    alexpdh閱讀 2,641評(píng)論 0 3