神奇好望角 The Magical Cape of Good Hope

          庸人不必自擾,智者何需千慮?
          posts - 26, comments - 50, trackbacks - 0, articles - 11
            BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理

          前面介紹了各種請(qǐng)求參數(shù)的注入,這些參數(shù)在 HTTP 請(qǐng)求中都是以純文本的方式存在的。在處理參數(shù)的時(shí)候,往往需要把這些文本參數(shù)轉(zhuǎn)換為 Java 對(duì)象。JAX-RS 提供了一些內(nèi)置的規(guī)則里自動(dòng)完成這種轉(zhuǎn)換。

          轉(zhuǎn)換規(guī)則一覽

          JAX-RS 提供了四條自動(dòng)類型轉(zhuǎn)換規(guī)則,下面我們逐條考察。

          原始類型

          這個(gè)早就見識(shí)過(guò)了,無(wú)需多說(shuō)。舉例回顧一下:

          @GET
          @Path("{id}")
          public Movie getXxx(@PathParam("id") int id) {/*...*/}
              

          提供接受單個(gè) String 參數(shù)的構(gòu)造器的類型

          這個(gè)也不難理解,JAX-RS 會(huì)自動(dòng)調(diào)用該構(gòu)造器創(chuàng)建一個(gè)對(duì)象:

          public class Style {
              public Style(String name) {/* ... */}
              // ...
          }
          
          @GET
          @Path("{name}")
          public Movie getXxx(@PathParam("name") Style style) {
              // JAX-RS 已自動(dòng)調(diào)用 xxx = new Style(name)
              // ...
          }
              

          提供靜態(tài)工廠方法 valueOf(String) 的類型

          也好理解。特別需要注意的是,所有的枚舉類型都在此列,因?yàn)榫幾g器會(huì)自動(dòng)給枚舉類型加上一個(gè)這樣的工廠方法。例如:

          public enum Style {/*...*/}
          
          @GET
          @Path("{name}")
          public Movie getXxx(@PathParam("name") Style style) {
              // JAX-RS 已自動(dòng)調(diào)用 style = Style.valueOf(name)
              // ...
          }
              

          類型參數(shù)滿足前兩個(gè)條件的 List<T>Set<T>SortedSet<T>

          這條規(guī)則適用于多值參數(shù),例如查詢參數(shù):

          @GET
          @Path("xxx")
          public Movie getXxx(@QueryParam("style") Set<Style> styles) {
              // JAX-RS 已自動(dòng)轉(zhuǎn)換每個(gè) Style 對(duì)象并組裝到 Set 中
              // ...
          }
              

          轉(zhuǎn)換失敗的處理

          如果轉(zhuǎn)換失敗,JAX-RS 會(huì)根據(jù)情況自動(dòng)拋出一個(gè)包裝了初始異常,但是帶不同 HTTP 錯(cuò)誤碼的 WebApplicationException:對(duì)矩陣參數(shù)(@MatrixParam)、查詢參數(shù) (@QueryParam)或路徑參數(shù)(@PathParam)來(lái)說(shuō)為 HTTP 404 找不到,而對(duì)頭部參數(shù)(@HeaderParam)或 Cookie 參數(shù)(@CookieParam)為 HTTP 400 錯(cuò)誤請(qǐng)求


          評(píng)論

          # re: JAX-RS 從傻逼到牛叉 7:注入?yún)?shù)的自動(dòng)類型轉(zhuǎn)換  回復(fù)  更多評(píng)論   

          2012-01-13 14:00 by danyili
          請(qǐng)教一下博主,怎么在jax-rs上加上安全認(rèn)證?

          # re: JAX-RS 從傻逼到牛叉 7:注入?yún)?shù)的自動(dòng)類型轉(zhuǎn)換  回復(fù)  更多評(píng)論   

          2012-01-13 15:45 by 蜀山兆孨龘
          @danyili

          JAX-RS 可以和容器管理的安全認(rèn)證無(wú)縫集成,只需要編輯 web.xml 的相關(guān)配置,例如 security-constraint,然后在 JAX-RS 類中用 @RolesAllowed 指定允許訪問(wèn)的角色就可以了。HTTPS 也是完全支持的。

          建議你先了解下 Java EE 安全方面的功能。
          主站蜘蛛池模板: 武安市| 常山县| 合肥市| 庄河市| 长子县| 宁津县| 定边县| 长丰县| 宝清县| 东海县| 闽清县| 新竹市| 伊川县| 吉安县| 开鲁县| 屏东市| 华容县| 六安市| 广南县| 莱阳市| 天祝| 台山市| 本溪| 杨浦区| 巫溪县| 乡宁县| 徐州市| 周口市| 萨迦县| 二连浩特市| 临汾市| 汉寿县| 枣阳市| 浦县| 南岸区| 岑溪市| 淮滨县| 泰兴市| 靖宇县| 阿勒泰市| 陵川县|